在PhysicsJS中停止身体旋转

时间:2014-12-12 04:58:49

标签: javascript html5 canvas physicsjs

我正在寻找阻止PhysicsJS身体旋转的最佳实践方法。 我试过取消身体的旋转速度。然而,这在步骤上似乎并不有效,因为身体仍然以某种方式潜入某些轮换。将此与手动设置身体旋转相结合似乎首先起作用:

world.on('step', function(){
    obj.state.angular.pos = 0;
    obj.state.angular.vel = 0;
    world.render();
});

但是在过去,我遇到了很多与此方法相关的错误。似乎与在被调用步骤之前允许稍微旋转的对象有关,这导致它被旋转"当body.state.angular.pos设置回零时很快。这导致物体突然发现自己在物体内,或者物体突然发现自己在墙壁/其他物体内。你可以想象的并不是一个理想的情况。

我也觉得设置一个身体的旋转是如此强有力的一定不是最好的方法,但我无法想到更好的方法。所以我想知道在PhysicsJS中是否有一些我尚未发现的方法,基本上只是陈述"这个物体不能旋转"但仍然允许身体被对待在所有其他方面都是动态的。

或者什么是最安全的"获得预期效果的方法,即使有一个不适用于physicsJS的通用指南,我也会很高兴,只是让我了解在模拟中控制动态体旋转的一般最佳实践。

提前感谢任何建议!

1 个答案:

答案 0 :(得分:1)

实现这一目标的关键是确保您先将身体置于睡眠状态,然后立即将其唤醒,然后将角速度设置为零。

因此,例如,我一直在做的是防止与旋转相撞的物体:

  world.on('collisions:detected', function(data, e) {
    var bodyA = data.collisions[0].bodyA,
        bodyB = data.collisions[0].bodyB;

    bodyA.sleep(true);
    bodyA.sleep(false);
    bodyA.state.angular.vel = 0;

    bodyB.sleep(true); 
    bodyB.sleep(false); 
    bodyB.state.angular.vel = 0;
  });

我也看到过这种做法是通过将所讨论的身体的质量增加到一个非常高的数字来实现的,但这可能会产生你可能不想要的副作用。