2016-08-03 4 views
0

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); 

Répondre

1

La gravité est une force, pas une vitesse. Appel quelque chose comme

Vector2 gravity = new Vector2(0, GRAVITY_EARTH); 
body.applyForceToCenter(gravity, true); 

dans la fonction étape devrait le faire. Veuillez noter que vous devez appliquer la force à chaque image depuis qu'elle a été effacée.

1

Vous devez appliquer la force opposée à chaque pas pour annuler la gravité. Voir les réponses de this question pour d'autres options.