首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PhysicsJS中的停止体旋转

PhysicsJS中的停止体旋转
EN

Stack Overflow用户
提问于 2014-12-12 04:58:49
回答 1查看 372关注 0票数 0

我正在寻找最佳实践方法来阻止PhysicsJS身体旋转。我试过取消身体的转速。然而,这似乎没有有效的步骤,因为身体仍然在某种程度上偷偷地在一些旋转。将此与手动设置身体的旋转相结合,一开始似乎是可行的:

代码语言:javascript
复制
world.on('step', function(){
    obj.state.angular.pos = 0;
    obj.state.angular.vel = 0;
    world.render();
});

然而,在过去,我经历了许多与此方法相关的bug。这似乎与允许对象在调用步骤之前稍微旋转有关,这使得它在body.state.angular.pos设置为零时非常快地被“旋转”。这会导致物体在主体内部突然发现自己,或者主体突然发现自己在墙壁/其他物体中。正如你所能想象的那样,这不是一种理想的情况。

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

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

提前感谢您的任何建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-05 21:54:30

要做到这一点,关键是要确保你先让身体入睡,然后立即唤醒它,然后将角速度设定为零。

例如,为了防止碰撞的物体旋转,我一直在做的事情是:

代码语言:javascript
复制
  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;
  });

我也看到这是通过增加被质疑的身体的质量来达到的,但是这可能会产生你不想要的副作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27437133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档