[翻译]WP 平衡球游戏开发教程(一) -初识 XNA Farseer 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中,也能找到我的身影,感谢大家

posted on 2012-02-26 18:29  yewenpeng  阅读(1759)  评论(1编辑  收藏  举报