Animación entrecortada en el motor de renderizado 2D de Java cuando el objeto se mueve rápido.
He estado haciendo un juego simple en el motor de renderización 2D de Java y me encontré con un problema, donde si un objeto se mueve lo suficientemente rápido, la animación titubeará cada par de segundos más o menos.
Quiero que sea más suave, para que la animación no parezca de baja calidad.
Este es el método run de mi clase Principal:
@Override
public void run() {
this.requestFocus();
long lastTime = System.nanoTime();
double amountOfTicks = 60.0;
double ns = 1000000000 / amountOfTicks;
double delta = 0;
long timer = System.currentTimeMillis();
int frames = 0, ticks = 0;
long renderLastTime = System.nanoTime();
double amountOfRenders = 60;
double renderNs = 1000000000 / amountOfRenders;
double renderDelta = 0;
while (isRunning) {
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while (delta >= 1) {
tick();
ticks++;
delta--;
}
now = System.nanoTime();
renderDelta += (now - renderLastTime) / renderNs;
renderLastTime = now;
while (isRunning && renderDelta >= 1) {
render();
frames++;
renderDelta--;
}
if(System.currentTimeMillis() - timer > 1000) {
timer += 1000;
FPS = frames;
UPS = ticks;
frames = 0;
ticks = 0;
}
}
stop();
}
Si necesita más código, por favor comente.
¡Por favor, ayúdame para hacer que este juego sea más suave!
Atentamente,
JulekPL
davy.ai
Una posible solución para resolver el problema de tartamudeo es implementar doble buffering. Doble buffering significa renderizar la imagen en un búfer fuera de pantalla (oculto al usuario), luego intercambiar los búferes para que la nueva imagen aparezca en la pantalla sin parpadeos ni retrasos.
Para implementar el doble buffering, puede crear una estrategia de búfer en el constructor de su clase principal:
Luego, modifique su método de renderización para dibujar en el búfer fuera de pantalla antes de voltear los búferes:
De esta manera, la animación debería ser más suave y sin tartamudeos. También puede experimentar con otros enfoques, como optimizar su motor de juego o utilizar la aceleración por hardware.