Ich versuche, einen einfachen Jump'n'Run zu machen, und wenn der Spieler springt, stelle ich die Geschwindigkeit auf eine Konstante, und dann verringere diese Konstante im Laufe der Zeit durch die Schwerkraft * deltaTime. Aus irgendeinem Grund führt dies jedoch zu unterschiedlichen Sprunghöhen. Ich denke, es hat mit DeltaTime zu tun, denn wenn ich deltaTime durch eine Konstante in der Hauptspielschleife ersetze, verschwindet dieses Problem.libGDX Varying Jump Height
Hier ist der Revelvent-Code.
GameState
public void resolveInput(float deltaTime) {
if(Gdx.input.isKeyJustPressed(Keys.ESCAPE))
Gdx.app.exit(); //temporary until we build menus
player.velocity.x = 0;
if(Gdx.input.isKeyPressed(Keys.A)) {
player.velocity.x -= Constants.PLAYER_MOVE_SPEED * deltaTime;
player.right = false;
}
if(Gdx.input.isKeyPressed(Keys.D)) {
player.velocity.x += Constants.PLAYER_MOVE_SPEED * deltaTime;
player.right = true;
}
if(Gdx.input.isKeyPressed(Keys.SPACE) && !player.falling) {
player.velocity.y = Constants.PLAYER_JUMP_SPEED;
player.falling = true;
}
}
public void update(float deltaTime) {
resolveInput(deltaTime);
world.update(deltaTime);
camHelper.update(deltaTime);
}
Welt:
public void update(float deltaTime) {
player.update(deltaTime);
player.setPosition(resolveCollisions());
}
public Vector2 resolveCollisions() {
Rectangle p = player.getBoundingRectangle();
//The rest of the code doesn't get called in my test cases so I won't put it in here...
return new Vector2(p.x + player.velocity.x, p.y + player.velocity.y);
}//resolveCollisions
Spieler:
public void update(float deltaTime) {
if(velocity.len() == 0)
sTime = 0;
else
sTime += deltaTime;
if(falling)
velocity.y -= Constants.GRAVITY * deltaTime;
velocity.y = MathUtils.clamp(velocity.y, -Constants.PLAYER_MAX_SPEED, Constants.PLAYER_MAX_SPEED);
}
Jede Hilfe wäre sehr willkommen: ein Jump'n'Run funktioniert nicht gut, wenn der Spieler nicht der Fall ist Springe immer gleich hoch!
Genau das passiert im Moment, soweit ich weiß. Wenn der Spieler springt, wird die y-Geschwindigkeit eingestellt und jedes Mal, wenn der Spieler die Schwerkraft aktualisiert, wird * deltaTime von der y-Geschwindigkeit subtrahiert. Danke für die Hilfe! – Calvin