安全删除Nape中的刚体

作者: ladeng6666 分类: Nape 发布时间: 2014-08-14 07:54 阅读: 11,978

Nape中可以用space.bodies来获取所有刚体列表,我们可以用多种方法对其进项遍历,for,while,包括它自带的foreach()方法。


有时候,我们需要批量性的删除某些特定刚体,这是可以在space.bodies中遍历中删除刚体,但是会影响游标的位置和列表的长度,有不可预知的风险,例如下面的示例中,我的初衷是按下空格键,删除物体上的所有圆形,并创建矩形刚体。再次按下空格键,删除所有矩形,创建圆形,以此类推。但是实际效果并不理想,每次的删除都不彻底,总有几个刚体混入到了另一个形状中去。点击图片查看Flash动态效果。

wrongRemove
正确的做法时下面的BodyList的filter方法来删除。filter方法的结构如下:

其参数是一个回调函数,函数的参数是BodyList中的每个刚体,根据我们删除的条件对刚体进行判断,如果符合删除要求,则回调函数返回false,否则返回true,例如下面的代码,可以讲space中的所有动态刚体都删除。

rightRemove

完整代码如下:

重点在49~65行的clearBodies()函数中,包括了真确和错误的方法,你可以试着把错误方法的注释去掉,查看不同的效果。点击下载源文件

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

4条评论
  • 2014 年 8 月 22 日 下午 4:13

    支持下

    1. ladeng6666

      2014 年 8 月 23 日 下午 1:40

      谢谢支持!欢迎继续关注我的物理教程!

  • kb

    2014 年 8 月 25 日 下午 3:25

    其实把遍历的顺序倒过来就可以了,如:
    var i:int = bodies.length;
    while(–i>=0){
    if(bodies.at(i).type==BodyType.DYNAMIC)
    bodies.remove(bodies.at(i));
    }

    1. ladeng6666

      2014 年 9 月 5 日 上午 10:30

      恩,这也是个方法,领教啦!

发表评论

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