我正在尝试使用Three.js&物理插件物理;只是一个小骰子滚。我的方法是使用setGravity移动骰子,模拟重力以移动骰子。我遇到的问题是,一旦骰子休息,他们就不再对引力做出反应。有没有人遇到过这个?
答案 0 :(得分:2)
发生了什么事: Physijs所基于的Ammo.js将静止或非常缓慢的移动物体置于睡眠状态以节省性能。因此,当你改变世界的引力时,睡眠的物体不在乎,因为Physijs并没有告诉他们重力已经改变了。
你可以修改sleeping thresholds,设置activation states或者在改变重力之前快速激活僵硬的身体。
请注意此代码适用于原生Ammo.js,我不知道如何操作 在使用physijs时这样做,但你明白了。
解决方案1:循环你的Bodys并激活它们,然后改变重力:
// 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 );
}