Physijs 停止更新?

Physijs stops updating?

我正在尝试使用 Three.js 和物理插件 physijs 制作一个小项目;只是一个小骰子滚筒。我的方法是使用 setGravity 来移动骰子,模拟重力来移动骰子。我 运行 关注的问题是,一旦骰子停止,它们就不再对重力做出反应。有人 运行 以前参与过这个吗?

发生了什么: Ammo.js,Physijs 的基础,将静止或非常缓慢移动的物体置于睡眠状态以节省性能。所以当你改变世界重力时,沉睡的物体并不关心,因为 Physijs 不会告诉它们重力已经改变。

您可以修改 sleeping thresholds, set activation states 或在改变重力之前快速激活刚体。

Please note this code applys to native Ammo.js, I am not sure how to do this when using physijs but you get the idea.

解决方案 1:在您的 Body 上循环并激活它们,然后改变重力:

// dice is an array with your rigid bodys
for ( var i = 0; i < dice.length; i ++ ) {
    // hey wake up
    dice[ i ].activate();
}
physicsWorld.setGravity( new Ammo.btVector3( 0, -9.81, 0 ) );

解决方案 2:你将无法入睡,在创建骰子后执行此操作:

var DISABLE_DEACTIVATION = 4;
for ( var i = 0; i < dice.length; i ++ )
    // no sleep for you... ever
    dice[ i ].setActivationState( DISABLE_DEACTIVATION );
}