问题
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)
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.
回答1:
Due to the fact that ammo.js is an emscripten port, you have to use its native datatypes to talk to it...
So for setting velocity you'd need to body.setLinearVelocity(new Ammo.btVector3(1,0,0));
Same goes for applyForce and applyImpulse.
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);
}
good luck :D
来源:https://stackoverflow.com/questions/26573039/bulletphysics-ammo-js-how-would-you-go-about-applying-force-to-an-object