L'application de la gravité au monde de la physique est facile, il vous suffit de créer un Vector2
et de définir sa valeur de gravité horizontale et verticale. Que faire si je veux créer un jeu 2D top-down avec une gravité nulle, et n'appliquer la gravité à un corps spécifique comme un mouvement de projectile d'une flèche. Bien sûr, il est facile d'avoir un mouvement de projectile si vous définissez votre monde pour avoir une gravité au début.Comment appliquer la gravité sur un corps spécifique
float GRAVITY_EARTH = -9.8f;
Vector2 gravity = new Vector2(0, GRAVITY_EARTH);
World world = new World(gravity, true);
classe corps Box2d a une méthode qui annule ou inverser la gravité, mais je ne veux pas l'utiliser à chaque fois, comme dans l'exemple de code ci-dessous.
body.setGravityScale(0); // set 0 to cancel the gravity, and set -1 to reverse the gravity
Mais je veux être polyvalent, je veux appliquer la gravité à un corps spécifique seulement. Par exemple, j'utilise la méthode setLinearVelocity
pour déplacer le corps vers une destination spécifique. Maintenant, si le monde a la gravité de -9.8f, il aura automatiquement un mouvement de projectile. J'ai essayé d'incrémenter la vitesse initiale de y à -9,8 pour appliquer la gravité.
Vector2 initialVelocity = targetPoint.sub(originPoint).nor();
initialVelocity.scl(speed); // to apply constant speed
body.setLinearVelocity(initialVelocity);
Mais ça n'a pas marché, qu'est-ce qui me manque?
initialVelocity.y += -9.8f;
body.setLinearVelocity(initialVelocity);
// or
body.applyForce(initialVelocity, body.getWorldCenter(), true);