WP7平衡球遊戲開發教程--初識XNA Faeseer Magic

小時候,我就想要自己做遊戲,今天的技術已經發展得如此便利,我們可以很容易地創建簡單的遊戲。本文試圖建立一個可重用的基於組件的遊戲框架,減少了我們建立基於物理引擎的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,並添加到當前的世界對象中,以便它可以通過引擎更新位置。
*/
Body MyBody = new Body(World);
MyBody.IsStatic = true;


  

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。下面是一些工廠的例子。

//Create Body which gets places at Origin.
Body MyBody = BodyFactory.CreateBody(MyWorld, Vector2.Zero);
//Create Circle Fixture with 10 Radius and 25 Density.
FixtureFactory.CreateCircle(MyWorld, 10, 25);


  PolygonTools:這個類可以幫助我們創建各種多邊形。使用這個類,我們可以創建矩形,圓角矩形,邊緣,圓形,橢圓形,齒輪。示例用法如下:

// 生成10x5尺寸的矩形的頂點。我們可以用同樣的方法創建更復雜的對象
Vertices vert = PolygonTools.CreateRectangle(10, 5);
FixtureFactory.CreatePolygon(vert, 10, MyBody);


  

現在我們已經創造的世界,加入了身體,用不同的方式創建了形狀,,給body加入了關節。這是所有Farseer物理引擎核心,毫無疑問,如果要建立更復雜的對象和大型遊戲,我們要了解更多知識,當然,現在已經足夠我們開始玩了。

請大家關注下一節:

在XNA(RenderXNA)渲染Farseer物理對象

我將在最後一節中放出所有源碼與實例,毫無保留。

我希望你能喜歡我的文章!如果你有更多想法,請到滷麪網 wp7開發論壇(codewp7.com)問答區聯繫我,我會很高興知道你在想什麼。同時wp7交流QQ羣172765887中,也能找到我的身影,感謝大家

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章