创建简单的Nape刚体

作者: ladeng6666 分类: Nape 发布时间: 2012-11-14 23:09 阅读: 14,541

认识Nape空间里,看我们了解了这个2D物理引擎,并学习了如何创建一个基本的Nape应用,今天我们来学习一下如何创建一些简单的Nape刚体。

运动与静止的刚体

和Box2D一样,Nape中的也分为静止和运动刚体,对应静止的刚体将不进行物理运动模拟,这样可以节省CPU的开支。我们可以通过刚体的type属性设置刚体的类型,这个属性值可以是DYNAMIC、STATIC或KINEMATIC,分别表示运动的、静止的和不受力作用但可以运动的静态刚体。

设置刚体的形状

Nape刚体的形状是通过body.shape属性来设置的,和Box2D不一样,这个shape属性是一个shapeList类对象,也就是说,我们无法直接给shape属性赋值,而是要通过body.shape.addShape()方法来添加刚体形状。

addShape()方法有一个Shape类型的参数,实际上我们通常都是使用Shape类的子类Circle和Polygon来设置刚体的形状,Shape类只有两个子类,但不代码刚体就只有两个形状。具体说明如下:

Circle类

Circle用来创建一个圆形对象。构造函数和相应的参数说明如下:

  • radius:圆形的半径,以像素为单位
  • localCOM:圆形的重心,即质量的中心,默认为(0,0)
  • material:圆形的材质,比如弹性、摩擦系数等,都通过material属性设置,相当于Box2D里的b2FixtureDef,默认为null。以后我会再详细介绍material的用方法
  • filter:设置刚体的碰撞分组,相当于Box2D中的FilterData

Polygon类

Polygon类会根据制定的一组顶点,来创建一个多边形对象。顶点的个数和坐标不同,就可以创建多各种各样的形状。它的构造函数和参数说明如下:

  • localVerts:表示一个保存了多边形顶点的数组。Polygon中有一些静态方法,如box(),可以帮我们返回一些简单的顶点数组,Polygon.box()也是我们创建矩形刚体常用的方法。
  • material:多边形的材质,比如弹性、摩擦系数等,都通过material属性设置,相当于Box2D里的b2FixtureDef,默认为null
  • filter:设置刚体的碰撞分组,相当于Box2D中的FilterData

总的来看,Nape刚体的创建过程要比Box2D简单一些,至少不用创建一大堆的b2Shape,b2FixtureDef,b2Fixture,b2BodyDef和b2Body对象,这么多对象,看着都头疼。所以Nape还是很值得学习的哦!

言归正传,认识了Circle和Polygon类之后,我们就可以创建简单的圆形和矩形刚体了(复杂的多边形Nape刚体,稍候我会陆续讲解)。

虽然今天只是学习了运动和静止的刚体,以及创建简单的形状,不过只要发挥想象力,我们一样可以作出很有趣的效果。像下面的示例,就是利用今天的知识,仿真出的<神奇的阿力>第一关的效果。

Sorry, either Adobe flash is not installed or you do not have it enabled

完整的代码和注释如下:

源代码下载

 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

9条评论
  • wAe]大兵

    2012 年 11 月 15 日 下午 1:54

    哇哈哈,nape教程出来了,一睹为快!

    1. ladeng6666

      2012 年 11 月 26 日 下午 8:20

      谢谢关注!

  • Pingback: 运行时绘制Nape刚体 « Ladeng6666-专业的Flash/AS3爱好者
  • 942

    2012 年 12 月 26 日 下午 3:06

    今天上班没事做可以看看咯!嘎嘎

  • 942

    2012 年 12 月 26 日 下午 4:01

    拉登哥,我现在可以不看你代码创建space和刚体什么了,只是有一个疑点,就是坐标和注册点的关系。调了注册点后,坐标就对不上,算的有点头晕!

  • louissong

    2013 年 6 月 26 日 下午 1:57

    啥为调试视图啊?

    1. ladeng6666

      2013 年 6 月 26 日 下午 7:45

      调试试图就是ShapeDebug,通常情况下,我们需要调试游戏,这时候可以用shapeDebug显示模拟出来的刚体形状,查看模拟效果!

  • jacksonjim

    2013 年 8 月 21 日 下午 4:33

    如何將Debug的坐標系統的0, 0 位置設置到舞台中間並且顯示出所有圖形對像.拉登…

    1. ladeng6666

      2013 年 8 月 21 日 下午 6:28

      debug只是一个Sprite对象,所以你可以像操作其他可视对象一样,直接调整它的x,y坐标至舞台中间。
      但要注意,贴图的时候,也要偏移值舞台中间,即贴图.x=debug.x+stage.stageWidth/2;

发表评论

电子邮件地址不会被公开。 必填项已用*标注