我正在尝试使用 Three.js 和物理插件 physijs 制作一个小项目;只是一个小骰子。我的方法是使用 setGravity 来移动骰子,模拟重力来移动骰子。我遇到的问题是,一旦骰子停下来,它们就不再对重力做出反应。有没有人遇到过这个?
问问题
397 次
1 回答
2
发生了什么: Physijs 所基于的 Ammo.js 将静止或非常缓慢移动的对象置于睡眠状态以节省性能。所以当你改变世界的重力时,沉睡的物体并不在乎,因为物理学并没有告诉他们重力已经改变了。
您可以修改睡眠阈值、设置激活状态或在改变重力之前快速激活刚体。
请注意,此代码适用于本机 Ammo.js,我不确定在使用 physijs 时如何执行此操作,但您明白了。
解决方案 1:循环你的身体并激活它们,然后改变重力:
// 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 );
}
于 2015-07-12T12:33:44.033 回答