Nunca antes había hecho mucha programación de juegos, una pregunta bastante directa.
Imagina que estoy construyendo un juego de Tetris, con el bucle principal más o menos así.
for every frame
handle input
if it's time to make the current block move down a row
if we can move the block
move the block
else
remove all complete rows
move rows down so there are no gaps
if we can spawn a new block
spawn a new current block
else
game over
Hasta ahora, todo en el juego ocurre instantáneamente: las cosas se generan instantáneamente, las filas se eliminan instantáneamente, etc. ¿Pero qué pasa si no quiero que las cosas sucedan instantáneamente (es decir, animar cosas)?
for every frame
handle input
if it's time to make the current block move down a row
if we can move the block
move the block
else
?? animate complete rows disappearing (somehow, wait over multiple frames until the animation is done)
?? animate rows moving downwards (and again, wait over multiple frames)
if we can spawn a new block
spawn a new current block
else
game over
En mi clon de Pong esto no fue un problema, ya que cada cuadro solo estaba moviendo la pelota y buscando colisiones.
¿Cómo puedo resolver este problema? Seguramente, la mayoría de los juegos implican alguna acción que toma más de un marco, y otras cosas se detienen hasta que se realiza la acción.
Action
clase y una cola de acciones para realizar. Cuando se completa una acción, retírela de la cola y realice la siguiente acción, etc. Mucho más flexible que una máquina de estado.