我正在寻找最佳实践方法来阻止PhysicsJS身体旋转。我试过取消身体的转速。然而,这似乎没有有效的步骤,因为身体仍然在某种程度上偷偷地在一些旋转。将此与手动设置身体的旋转相结合,一开始似乎是可行的:
world.on('step', function(){
obj.state.angular.pos = 0;
obj.state.angular.vel = 0;
world.render();
});然而,在过去,我经历了许多与此方法相关的bug。这似乎与允许对象在调用步骤之前稍微旋转有关,这使得它在body.state.angular.pos设置为零时非常快地被“旋转”。这会导致物体在主体内部突然发现自己,或者主体突然发现自己在墙壁/其他物体中。正如你所能想象的那样,这不是一种理想的情况。
我也觉得像设置一个身体的旋转,如此有力,不一定是最好的方法,但我想不出更好的方法。因此,我想知道,在PhysicsJS中是否有一些方法,我还没有发现,基本上只是声明“这个对象不能旋转”,但仍然允许在所有其他方面将身体视为动态的。
或者,获得预期效果的“最安全”方法是什么,即使有一个不适合physicsJS的通用指南,我也会很高兴,只是想让我知道在模拟中控制动态身体旋转的一般最佳实践是什么。
提前感谢您的任何建议!
发布于 2015-02-05 21:54:30
要做到这一点,关键是要确保你先让身体入睡,然后立即唤醒它,然后将角速度设定为零。
例如,为了防止碰撞的物体旋转,我一直在做的事情是:
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;
});我也看到这是通过增加被质疑的身体的质量来达到的,但是这可能会产生你不想要的副作用。
https://stackoverflow.com/questions/27437133
复制相似问题