小時候,我就想要自己做遊戲,今天的技術已經發展得如此便利,我們可以很容易地創建簡單的遊戲。本文試圖建立一個可重用的基於組件的遊戲框架,減少了我們建立基於物理引擎的XNA遊戲所需的時間。
我認爲我們應該先明確一點,先建立一個遊戲的基礎代碼,然後逐個解決我們要處理的問題。因此,我們先建立非常簡單,但很容易上癮的遊戲類型,即玩家只需要在物體每次跳躍時擊中地面,同時控制物體的向左和向右的運動。對於不斷滾動而向前的移動,玩家很難控制的,也無法掌握遊戲的速度。這種額外操作會加大玩遊戲的難度,畢竟遊戲吸引的玩家在不同的級別(包括新手,正常水平,骨灰級牛B玩家),所以我們將建立一套不同的困難與不同關卡。關於遊戲的目標,除了生存,玩家需要收集更多的得分與獎勵(我們需要考慮我們如何實現它),這是我們的想法。根據上述的想法,你所需要的基本的東西,就包括關卡選擇場景,遊戲場景(場景系統),物理碰撞(Farseer物理對象),得到玩家左,右運動的輸入按鈕,得分系統(畢竟這是一場比賽,他們需要一些目標,我們的遊戲的目標是取得儘可能多的玩家)。
在這裏我不得不感謝一直支持我的滷麪網版主,是他讓我提起興趣寫了這麼一篇文章,再次感謝滷麪網,一個非常不錯的wp7開發論壇,後面我也將再次向大家發佈幾篇高質量文章,請大家到滷麪上找我吧,呵呵
進入正題:
Farseer物理引擎3.2和XNA 4
什麼是物理引擎,爲什麼我們需要這個?
物理引擎,使物體以一種我們正常世界接受的方式移動,使他們服從現實世界的物理規則。從比賽的角度來看,一個物理引擎僅僅是一個功能性的動畫系統。
我們可以建立一個我們自己的,但又不需要我們關心太多的以物理規則運動的對象。我們的目標是快速和可靠的製作遊戲,因此,我們不打算自己去做物理引擎,而將使用現有的Farseer物理引擎(V3.2)。
Farseer物理引擎的背景
Farseer物理引擎是一個Box2D的C#版本。Box2D的是一個2D剛體模擬遊戲開發庫。Farseer物理引擎是一個模擬真實的物理反應的碰撞檢測系統。讓我們從基本知識開始。若要使用Farseer物理引擎你需要知道如下所述的4點:
1。世界:這是對象,它包含一切,你可以把它與現實世界比較。它確定了以一定規則移動的物體,並確保一切的運轉是一致,穩定的。
/ / 創建一個新的世界與重力方向向下10。
World MyWorld =
new World(-Vector2.UnitY * 10);
|
2.Body:不像現實世界,他們沒有任何預設的結構或形狀。body跟蹤world的位置,並受碰撞或重力的影響。以下是有關body類型的細節。
StaticBody:在模擬環境下,這種body不動,他們不與其他靜態或動態物品相撞。 如果開發者希望將它們移動,當然也是可以的。
KinematicBody:它模擬有移動速度的物品。Kinematic bodies 不受外力影響。開發者可以強制動移動它們,但大多時候只是設置它的速度。他們不與其他StaticBody或KinematicBody碰撞。DynamicBody:它總是具有非零的具體質量(不會無窮大)。它可以與任何類型的bodies碰撞。
/ * 創建一個新的Static Body,並添加到當前的世界對象中,以便它可以通過引擎更新位置。 |
3。Shapes :它是2D結構的body,表示物體在世界上佔有多少空間,如:多邊形,方形,圓形等,在計算的慣性,質量,質心和其它相關的東西時,需要這個屬性。Shapes 可以獨立於Body使用。總之 body有它的位置和速度,並可以受外力,推動,和扭矩的作用。
/ * 創建一個新的半徑爲10,密度爲25的圓形。* /
|
CircleShape MyCircle =
new CircleShape(10, 25); |
4。Fixture:它表示body和shape之間的黏着性。Fixture和shape,body都有關係,還提供了類似摩擦性能,恢復原狀(彈跳能力,我猜),密度等屬性,Fixture與碰撞有一定的相關性,比如說,形狀間碰撞的效果是由他影響的。
Fixture MyFixture =
new Fixture(MyBody, MyShape); |
關節:這是兩個或兩個以上的物體共同的連接點。在遊戲中的典型例子包括布娃娃,搖搖墜,及滑輪。可以以許多不同的方式組合關節來創造有趣的效果。有多種類型的關節,如Angle Joint, Distance Joint, Friction Joint, Revolute Joint, Gear Joint, Line Joint, Prismatic Joint, Pulley Joint, Revolute Joint, Slider Joint and Weld Joint,
AngleJoint MyJoint =
new AngleJoint(BodyA, BodyB); |
工廠:工廠提供方法來創建基本類型的對象。每個對象類型都有它自己的許多重載的靜態工廠,以提供充分的靈活性。我們在我們的遊戲主要用BodyFactory和FixtureFactory。下面是一些工廠的例子。
PolygonTools:這個類可以幫助我們創建各種多邊形。使用這個類,我們可以創建矩形,圓角矩形,邊緣,圓形,橢圓形,齒輪。示例用法如下:
現在我們已經創造的世界,加入了身體,用不同的方式創建了形狀,,給body加入了關節。這是所有Farseer物理引擎核心,毫無疑問,如果要建立更復雜的對象和大型遊戲,我們要了解更多知識,當然,現在已經足夠我們開始玩了。
請大家關注下一節:
在XNA(RenderXNA)渲染Farseer物理對象
我將在最後一節中放出所有源碼與實例,毫無保留。
我希望你能喜歡我的文章!如果你有更多想法,請到滷麪網 wp7開發論壇(codewp7.com)問答區聯繫我,我會很高興知道你在想什麼。同時wp7交流QQ羣172765887中,也能找到我的身影,感謝大家