组合法创Nape多边形刚体

作者: ladeng6666 分类: Nape 发布时间: 2013-01-26 22:38 阅读: 7,498

看到题目有没有有想到Box2D多边形刚体里的组合法和原生法创建Box2D多边形刚体呢?没错Nape的组合法跟Box2D在原理上是一样的。今天我们来学习一下Nape中创建多边形刚体的组合法。

我们知道,Nape中的刚体结构比Box2D刚体结构要简单,没有b2FixtureDef、b2Fixture或b2ShapeDef、b2Shape等这些让人头疼的类和混乱的关系,Nape刚体的所有图形都在Body.shapes属性中,用组合法创建多边形刚体,我们需要做的就是把多个Shape对象或子对象添加到Body.shapes属性中就可以了。

打个比方来讲。我们都知道,在Flash中可以将一个MovieClip对象作为容器,将其他的MoviClip对象添加到其中,作为它的子对象,当我们旋转这个容器时,里面的子对象也会随着旋转。Body.shapes属性就相当于这个容器,要添加的Shape图形就是容器中的子对象,这样讲应该会比较好理解吧!

Body.shapes会返回一个ShapeList对象,然后我们可以通过调用ShapeList的push()方法将其他Shape图形添加进去,代码如下:

图形添加进去之后,默认是在刚体的中心的,如下面图中的矩形。但是,有时候我们也会遇到下图中圆形Shape的情况,图形不在刚体的中心,

这时候就要用shape的localCOM(即local center of mass重心)属性设置图像的偏移量。

napeShapeOffset

如上图圆形的圆心在(10,10)处,那么设置它的偏移量代码应该写成:

解决了图形偏移量的问题,新的问题又来了,像下图中添加图形后,刚体中心(也是重心)在图形之外,这在现实生活中是不大可能发生的,我们需要把刚体重心移动至合理的位置,比如下图中矩形和圆形之间。

napeShapeOffset2

怎么做呢?很简单,Body中有一个align()方法,可以自动纠正刚体的重心移动到图形中心位置。代码如下:

完成了这些工作之后,我们就可以创建出完美的组合式多边形刚体啦!

在下面的示例用,点击并拖动上面工具条中的矩形或圆形,可以创建一个图形,点击创建好的图形,可以进行角度调整,多创建几个并将它们进行组合后,点击create按钮创建刚体。试试看吧!

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

很酷吧,是不是有点神奇的阿力的感觉?

完整的源代码如下,点击这里下载源文件。

代码的重点在71-98行,创建图形并添加到Body刚体中,我已经添加了详细的注释,就不再赘述了。

 

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

2条评论

发表评论

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