2016-07-27 22 views
1

Ich mache ein Plataform-Spiel und jetzt mache ich die Spielerbewegungen. Wenn ich 'A' drücke, bewegt sich der Spieler nach links (player.moveLeft()); Wenn ich 'D' drücke, bewegt sich der Spieler zur rechten Seite (player.moveRigth()); und wenn ich 'W' drücke, springt der Spieler (player.jump()).Wie stoppen Sie die Impulse und Kräfte eines Körpers, aber nicht die Schwerkraft in libGDX (Box2D)?

public void moveLeft() { 
    if(Gdx.input.isKeyPressed(Keys.A) && 
     !Gdx.input.isKeyPressed(Keys.D) && 
     body.getLinearVelocity().x > -MAXIMUM_VELOCITY){ 
     left = true; 
     body.applyLinearImpulse(-3, 0, body.getPosition().x, body.getPosition().y, true); 
    }else if(Gdx.input.isKeyPressed(Keys.D) && 
      Gdx.input.isKeyPressed(Keys.A) && 
      !inTheAir){ 
     stop(); 
    }else if(!Gdx.input.isKeyPressed(Keys.A) && 
      !Gdx.input.isKeyPressed(Keys.D) && 
      !inTheAir){ 
     stop(); 
    } 
} 

public void moveRigth() { 
    if(Gdx.input.isKeyPressed(Keys.D) && 
     !Gdx.input.isKeyPressed(Keys.A) && 
     body.getLinearVelocity().x < MAXIMUM_VELOCITY){ 
     rigth = true; 
     body.applyLinearImpulse(3, 0, body.getPosition().x, body.getPosition().y, true); 
    }else if(Gdx.input.isKeyPressed(Keys.D) && 
      Gdx.input.isKeyPressed(Keys.A) && 
      !inTheAir){ 
     stop(); 
    }else if(!Gdx.input.isKeyPressed(Keys.D) && 
      !Gdx.input.isKeyPressed(Keys.A) && 
      !inTheAir){ 
     stop(); 
    } 
} 

public void stop(){ 
    body.setLinearVelocity(0, 0); 
    body.setAngularVelocity(0); 
} 

public void jump(){ 
    if(!inTheAir && Gdx.input.isKeyPressed(Keys.W)){ 
     inTheAir = true; 
     body.setLinearVelocity(0, 0); 
     body.setAngularVelocity(0); 
     body.applyLinearImpulse(0, 7, body.getPosition().x, body.getPosition().y, true); 
    } 
} 

Es funktioniert, aber ich habe ein Problem: wenn ich ‚A‘ oder ‚D‘ drücken, bevor Sie springen, und wenn der Spieler springt und ich die Taste loslassen, hält der Spieler bewegt. Wie kann ich es reparieren?? Bitte hilf mir!!

Antwort

1

Sie müssen die Geschwindigkeit X-Achse manipulieren:

Vector2 vel = body.getLinearVelocity(); 
vel.x = 0f; 
body.setLinearVelocity(vel); 

diese Weise wird die Y-Achsen-Geschwindigkeit bleibt die gleiche, aber Ihre Spieler nicht seitwärts bewegen.

+0

Es hat funktioniert, vielen Dank !!! : D – Lordeblader