2017-05-01 3 views
0

J'ai deux corps dynamique. À chaque étape, j'essaie de définir la vitesse de const pour ces corps. existe trois variantes comment faire ceci:Box2d étrange applyLinearImpulse

body.applyLinearImpulse(Helper.getVec(config.getLinearVelocity()*body.getMass(), body.getAngle()), body.getPosition()); 

ou

body.applyForce(Helper.getVec(config.getLinearVelocity()*body.getMass(), body.getAngle()), body.getPosition()); 

ou

body.setLinearVelocity(Helper.getVec(config.getLinearVelocity(), body.getAngle())); 

config.getLinearVelocity() valeur de retour V pour le premier corps et 1.5*V pour la deuxième corps.

Si j'appelle le setLinearVelocity à chaque étape, alors les corps bougent normalement, chacun avec sa propre vitesse. Mais si j'appelle d'autres fonctions à chaque pas, les corps se déplacent à la même vitesse, à ce moment-là, leur vitesse est plusieurs fois plus élevée que si j'utilise setLinearVelosity. Pourquoi?

Répondre

0

Vous devez appeler applyLinearImpulse une seule fois, car lorsque vous appelez cette fonction, le mouvement sera décomposé en plusieurs étapes. Par exemple, si vous voulez faire sauter un joueur, vous n'appelez applyLinearImpulse() sur son corps qu'une seule fois (lorsque vous touchez l'écran par exemple) et que box2d augmentera la vitesse, alors la force de gravité le diminuera. Par contre, setLinearVelocity va régler la vitesse juste pour l'étape actuelle du monde