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 );
}
我正在尝试使用 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 );
}