java android libgdx game-physics frame-rate

java - LibGdx física independiente de framerate



android game-physics (1)

Creo que tu problema está aquí:

velocity.add(0, world.getGravity());

También necesita escalar la gravedad al modificar la velocidad. Tratar:

velocity.add(0, world.getGravity() * deltaTime);

En una nota separada, tratando de usar box2D, que puede manejar esto por ti :)

Estoy trabajando en plataformas simples como Super Mario. Estoy usando Java con el motor LibGdx. Tengo un problema con la física que es independiente de la velocidad de fotogramas. En mi juego, el personaje puede hacer un salto, la altura del salto es aparentemente dependiente de la velocidad de cuadros.

En mi escritorio, el juego funciona bien, funciona a 60 fotogramas por segundo. También probé el juego en una tableta en la que corría a un fps más bajo. Lo que sucedió fue que el personaje podría saltar mucho más alto que cuando salté sobre la versión de escritorio.

Ya leí algunos artículos sobre cómo corregir el paso del tiempo, lo entiendo, pero no lo suficiente como para aplicarlo a esta situación. Parece que me estoy perdiendo algo.

Aquí está la parte física del código:

protected void applyPhysics(Rectangle rect) { float deltaTime = Gdx.graphics.getDeltaTime(); if (deltaTime == 0) return; stateTime += deltaTime; velocity.add(0, world.getGravity()); if (Math.abs(velocity.x) < 1) { velocity.x = 0; if (grounded && controlsEnabled) { state = State.Standing; } } velocity.scl(deltaTime); //1 multiply by delta time so we know how far we go in this frame if(collisionX(rect)) collisionXAction(); rect.x = this.getX(); collisionY(rect); this.setPosition(this.getX() + velocity.x, this.getY() +velocity.y); //2 velocity.scl(1 / deltaTime); //3 unscale the velocity by the inverse delta time and set the latest position velocity.x *= damping; dieByFalling(); }

Se llama a una función jump () y agrega una variable jump_velocity = 40 a velocity.y.

La velocidad se usa en la detección de colisión.