小时候,我就想要自己做游戏,今天的技术已经发展得如此便利,我们可以很容易地创建简单的游戏。本文试图建立一个可重用的基于组件的游戏框架,减少了我们建立基于物理引擎的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中,也能找到我的身影,感谢大家

WP7平衡球游戏开发教程--初识XNA Faeseer Magic相关推荐

  1. WP7平衡球游戏开发教程(二)--在XNA渲染渲染Farseer物理对象

    在本节中,我们将看到一些实质代码和world定位对象根本原理.首先,我们需要了解Farseer物理引擎对对象的测量. 了解Farseer物理引擎的测量方式 Farseer 是Box2D引擎的一个版本, ...

  2. WP 平衡球游戏开发教程(一) -初识 XNA Farseer Magic

    小时候,我就想要自己做游戏,今天的技术已经发展得如此便利,我们可以很容易地创建简单的游戏.本文试图建立一个可重用的基于组件的游戏框架,减少了我们建立基于物理引擎的XNA游戏所需的时间. 我认为我们应该 ...

  3. [翻译]WP 平衡球游戏开发教程(三) -DebugDraw(XNA渲染)

    - DebugDraw是Farseer物理引擎提供的一个功能,让我们还在开发阶段,能在屏幕上绘制对象数据,这将帮助您可视化body,fixtures ,以及其它物体.我在想,我们为什么不能在实际应用中 ...

  4. WP 平衡球游戏开发教程(三) -DebugDraw(XNA渲染)

    - DebugDraw是Farseer物理引擎提供的一个功能,让我们还在开发阶段,能在屏幕上绘制对象数据,这将帮助您可视化body,fixtures ,以及其它物体.我在想,我们为什么不能在实际应用中 ...

  5. WP 平衡球游戏开发教程(二) -在XNA 渲染Farseer物理对象

    在本节中,我们将看到一些实质代码和world定位对象根本原理.首先,我们需要了解Farseer物理引擎对对象的测量. 了解Farseer物理引擎的测量方式 Farseer 是Box2D引擎的一个版本, ...

  6. 平衡球游戏开发教程(四)--深入了解WP7游戏底层原理

    前面我们都只是集中在物理引擎上,但是对于一个游戏来说,他包含的不只是物理引擎,他还要有游戏面板(普通的,可以滚动的),按钮,标签,图片,背景(层次背景),边界控制,输入处理,字体和纹理管理,帧率测速器 ...

  7. Windows8 游戏开发教程-开篇

    准备开始写一个win8游戏开发教程了,现在这里整理一下思路. 需要在开篇解释的问题就有一大堆了,先尝试一个个把他们写下来. 1.阅读这个教程需要什么样的基础? 2.这个教程能带来一个怎样的DEMO,结 ...

  8. Cocos Creator游戏开发教程 学习笔记

    学完提问几个问题吧: position的锚点位置数值原点在哪里? 因为position是相对坐标,所以原点是父节点的锚点 .所以Canvas下面的直属节点原点就是世界坐标系的原点Canvas的锚点. ...

  9. 七巧板平台html5游戏开发之初识物理引擎

    七巧板平台html5游戏开发之初识物理引擎 七巧板平台是用于Web App.中轻度HTML5游戏及富媒体类应用开发,集开发.运营于一体的平台.它基于HTML5技术开发,具有进入门槛极低.开发极简单.跨 ...

最新文章

  1. React typescript issue
  2. The Long-Term Stability of Ecosystems
  3. 配置2008的网络与工作组环境
  4. linux gdal安装错误,CentOS8下安装GDAL最新版|rgdal安装失败解决方案
  5. OpenGL:着色器shader
  6. Gtk-WARNING **: 无法在模块路径中找到主题引擎:“pixmap”(转)
  7. .net core中不支持GB2312编码的问题
  8. 获取mysql所有用户权限_查看MYSQL数据库中所有用户及拥有权限
  9. android sqlite使用之模糊查询数据库数据的三种方式
  10. 重大危机引发的公司经营战略问题回顾
  11. 计算机毕业设计 基于springboot+vue的校园志愿者管理系统
  12. CSS3渐变、过渡、2D、3D和动画
  13. 参加阿里的Java面试经验
  14. Tuner及工作原理介绍
  15. 破解从 AppStore 下载的 IPA
  16. 人工智能之旅,真的特别费人工!
  17. 解决:java.lang.IllegalStateException: Failed to load property source from ‘file:~application.yml
  18. 利用ADS中的Batch Simulation进行DDR仿真
  19. 找茬类辅助工具的编写
  20. 移动叔叔MT6573一键ROOT工具!适应所有android2.2/2.3以上系统

热门文章

  1. 在MAC中怎么把窗口快速移到另一个显示器
  2. HTML表格标签的案例
  3. O2O分享6:O2O的社会化营销(下)
  4. Office 365:如何删除和管理Microsoft Team (Office 365 Groups)Team Site
  5. 用自我暗示让潜意识工作
  6. 港科夜闻丨香港科大与华为达成战略合作,推动研究及培育人才
  7. qlabel 添加图标_Qt 程序和窗口添加图标
  8. 这大概是博主用过的最好用的打卡功能——华为云WeLink
  9. 协议转换器(网关实现)
  10. 微信支付V3版本回调+验签流程