0

我正在寻找阻止 PhysicsJS 主体旋转的最佳实践方法。我试过取消身体的旋转速度。然而,这在台阶上似乎并不有效,因为身体仍然以某种方式偷偷地进行一些旋转。将其与手动设置身体的旋转相结合似乎首先起作用:

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

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

我也觉得如此强行设置身体的旋转一定不是最好的方法,但我想不出更好的方法。所以我想知道 PhysicsJS 中是否有一些我还没有发现的方法,基本上只是声明“这个对象不能旋转”,但仍然允许在所有其他方面将身体视为动态的。

或者,获得所需效果的“最安全”方法是什么,即使有一个不是为physicsJS量身定制的通用指南,我也会很高兴,只是让我了解在模拟中控制动态身体旋转的一般最佳实践是什么.

提前感谢您的任何建议!

4

1 回答 1

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;
  });

我还看到通过将相关物体的质量增加到一个可笑的高数字来实现这一点,但这可能会产生您可能不希望的副作用。

于 2015-02-05T21:54:30.643 回答