问题描述
为了澄清- ammo.js
是使用mscripten的Bullet Physics的移植
To clarify - ammo.js
is a port of Bullet Physics using mscripten
我有一个字符(本质上是一个块),需要用力推动。我已经尝试过(我认为)所有方法都可以使用力量,但是我仍然无法移动障碍物。
I have a character (essentially a block) that needs to be pushed with force. I have tried (I think) all of the methods for forces but I still cannot move the block.
setVelocity(1,0,0)
甚至不移动块-只是阻止重力作用在块上!
applyImpulse([0,0,200000],[0,0,0])
绝对没有任何作用。
applyForce([0,0,200000],[0,0,0])
绝对没有任何作用。
setVelocity(1,0,0)
does not even move the block - it just stops gravity from acting on it!applyImpulse([0,0,200000],[0,0,0])
does absolutely nothing.applyForce([0,0,200000],[0,0,0])
does absolutely nothing.
推荐答案
由于ammo.js是一个脚本端口,因此您必须使用其本机数据类型与之通信...
Due to the fact that ammo.js is an emscripten port, you have to use its native datatypes to talk to it...
设置您需要的速度body.setLinearVelocity(new Ammo.btVector3(1,0,0));
So for setting velocity you'd need to body.setLinearVelocity(new Ammo.btVector3(1,0,0));
applyForce和applyImpulse都一样。
Same goes for applyForce and applyImpulse.
在我的代码中,我通常制作一组临时的btVector3s,并在整个文件中使用它们,以减少分配和垃圾回收的开销。.
In my code, I usually make a set of temporary btVector3s, and use them throughout the file, in order to reduce the overhead of allocation and garbage collection..
var tbv30 = new Ammo.btVector3();
function setBodyVelocity(body,x,y,z){
tbv30.setValue(x,y,z);
body.setLinearVelocity(tbv30);
}
祝你好运:D
这篇关于BulletPhysics(ammo.js)-您将如何对物体施加力?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!