Ayuda con los frames de mi Sprite

José Miguel Romero Castillo
13 de Junio del 2013
Hola. Estoy aprendiendo acerca de los Sprites y tengo un problema, cuando cargo la imagen que contiene los frames y escribo el código para que cada segundo pase al siguiente frame, el Sprite cambia al frame siguiente aleatoriamente.

Alguien me puede decir cómo puedo hacer para que los frames cambien en orden (0,1,2). He intentado muchas veces y nada.

Ah, por cierto, estoy trabajando en Netbeans 7.2.

Alvaro
12 de Agosto del 2026

Ese comportamiento «aleatorio» casi siempre viene de llamar al avance de frame desde el sitio equivocado, no de un problema real con el orden de los frames.

Si estás llamando a algo tipo sprite.nextFrame() dentro del método paint(), el problema es que paint() no se ejecuta a un ritmo fijo ni predecible, se llama cuando el sistema decide repintar, así que el frame puede avanzar varias veces en una pasada o quedarse parado, dando esa sensación de aleatoriedad.

Lo correcto es separar «cuándo avanza el frame» de «cuándo se pinta». Usa un game loop con un Thread propio (o un TimerTask) que controle el ritmo:

while (running) {
  sprite.nextFrame(); // solo aquí, una vez por ciclo
  canvas.repaint();
  try { Thread.sleep(200); } catch (InterruptedException e) {}
}

Y en paint()/paint(Graphics g) del Canvas, solo dibujas el estado actual del sprite (sprite.paint(g)), nunca avanzas el frame ahí. Con esto el avance queda controlado por tu bucle a un intervalo fijo (en el ejemplo, 200ms = 5 frames por segundo), y el orden 0,1,2... se respeta siempre porque solo hay un sitio en el código que llama a nextFrame().

Alvaro