Physijs停止更新?

时间:2015-05-01 13:59:12

标签: physijs

我正在尝试使用Three.js&物理插件物理;只是一个小骰子滚。我的方法是使用setGravity移动骰子,模拟重力以移动骰子。我遇到的问题是,一旦骰子休息,他们就不再对引力做出反应。有没有人遇到过这个?

1 个答案:

答案 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 );
}