2016-10-03 3 views
2

Im actuellement en train de développer un petit robot d'exploration de donjon. Ma classe "Chevalier" devrait avoir une capacité spéciale. Il devrait pouvoir avancer et percer les Enemys. Im actuellement en utilisant Box2D Bodys pour les Enemys et le joueur ... Une idée de comment donner au corps du joueur une poussée dans une direction?Libgdx/Box2D Appliquer une poussée sur le corps?

J'ai déjà testé:

entityBody.applyLinearImpulse(100f, 0, entityBody.getWorldCenter().x, entityBody.getWorldCenter().y, true);   

Il fonctionne, mais le problème est que le corps est téléporté dans cette direction et non « poussé en avant ». Il ne se heurte pas non plus en bougeant si vite ... Des idées?

+1

Avez-vous essayé avec 'body.setLinearVelocity()'? Cela fonctionne parfaitement pour moi. – Marius

+0

Salut! Merci pour votre réponse rapide :-) Je viens de l'essayer, mais il y a un problème, à cause du jeu de paramètres que j'ai mis à zéro (sans cela le corps glisserait). Quand j'essaie de mettre SetLinearVelocity, il pousse dans cette direction mais il ignore les entités bodys ... The Strange Thing est que cela n'arrive que lorsque j'utilise une vitesse linéaire élevée – genaray

+0

No Ideas? :/Je serais heureux pour de l'aide – genaray

Répondre

0

Découvrez ce que le Wiki doit dire: https://github.com/libgdx/libgdx/wiki/box2d#impulsesforces

Vous pourriez être intéressé par la section Mouvement Joueur Exemple. Ils appliquent une impulsion gauche ou droite à un corps en fonction de si et quelle touche est pressée, et si le corps n'a pas atteint une vitesse maximale.

Vector2 vel = this.player.body.getLinearVelocity(); 
Vector2 pos = this.player.body.getPosition(); 

// apply left impulse, but only if max velocity is not reached yet 
if (Gdx.input.isKeyPressed(Keys.A) && vel.x > -MAX_VELOCITY) {   
    this.player.body.applyLinearImpulse(-0.80f, 0, pos.x, pos.y, true); 
} 

// apply right impulse, but only if max velocity is not reached yet 
if (Gdx.input.isKeyPressed(Keys.D) && vel.x < MAX_VELOCITY) { 
    this.player.body.applyLinearImpulse(0.80f, 0, pos.x, pos.y, true); 
} 

Pour la question de la collision ne se produit pas parce que le corps se déplace trop vite, vous devrez peut-être mettre le drapeau de la balle sur la BodyDef du corps:

bodyDef.bullet = true; 

vous configurez également l'impulsion x à 100, ce qui signifie essentiellement définir la vitesse x à 100 mètres par seconde ... assez sacrément rapide (environ 224 mph). Si cela est désiré, alors n'hésitez pas à battre les ennemis avec la vitesse d'une supercar!