BulletPhysics (ammo.js) - How would you go about a

2019-09-17 09:04发布

问题:

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