用Nape创建绳索效果

作者: ladeng6666 分类: Nape 发布时间: 2013-03-30 14:55 阅读: 4,865

DistanceJointLineJoint关节里,我一直都在试图模拟《割绳子》里的绳子效果,如下图所示。

虽然样子是有了,但是小球不想是被系在绳子上,更像是被顶到了一个木板上。今天我们将在Nape中用多个PivotJoint关节模拟真实的绳索效果。

distance_lineJoint

我想象中的绳索模型是这样子的。用一个圆形刚体作为绳子的起首端startBody,从这个首端刚体开始,用PivotJoint连接一个段刚体segmentBody,然后再用一个新的PivotJoint关节将第2个段刚体与第1个段刚体连接起来,以此类推。最后,将最后一个段刚体链接到绳索是末端刚体上endBody。设置一个首和尾端刚体的好处在于,可以通过这个两个刚体,轻松的固定绳索的两端,或者将其他刚体链接到绳索的末端。

与Box2D绳索效果一节的思路不同,这一次我没有从绳索的末端添加刚体,而是从首端开始插入刚体,如下图所示:

 rope_segment1

这样做的话,就不用每次根据绳索的长度重新计算新增段刚体的坐标了。这样不管是新增或删除段刚体就可以很轻松的实现了。

另外一点就是节点的控制。我分为两部份,一部份是首末端与刚体链接的节点,一部份是段刚体之间的连接的节点。如下图所示。

rope_segment2

如左图所示,在添加第1个段刚体时,用两个PivotJoint关节joint1和joint2将其连接到首末刚体上,节点分别是首末刚体的坐标。

在添加第2个段刚体时,首先新建一个PivotJoint将其连接到首刚体上,节点是首刚体的坐标。然后将前一个关节p1的body1由原来的startBody改为新增的段刚体b2,anchor1设置为joint1.anchor的相对于b2的坐标。重复上的步骤可以添加更多的段刚体,让绳索变的更长。

把LineJoint中的示例用上面的绳索实现,就更像《割绳子》里的效果了。同样的,按下空格键可以”剪断”绳索,当小球掉到下面的节点范围内,会自动创建新的绳索。

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

完整的代码如下:

值得注意的是,因为新增的段刚体都是从首端开始的,所以我下意识的用unshift将刚体添加到了bodyList和jointList数组的第1个位置,这样访问起来,就不用考虑绳索的长度了。

下载源文件

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

4条评论
  • Samuel Batista

    2013 年 7 月 6 日 下午 2:30

    Hi there, I just want to say thank you! This isn’t as easy to follow as I hoped for, but the source code you provided has been absolutely fantastic help. Thanks!

  • 大谷Spitzer

    2014 年 7 月 31 日 下午 10:38

    为啥这里创造出来的绳索都自带弹性?.stiff明明已经设置成true了…

    1. ladeng6666

      2014 年 8 月 3 日 上午 10:29

      是个好问题,我一直也没注意,回头研究一下,谢谢指正!

      1. 大谷Spitzer

        2014 年 8 月 5 日 上午 1:51

        辛苦!

发表评论

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