Eu realmente nunca fiz muita programação de jogos antes, uma pergunta bastante direta.
Imagine que estou construindo um jogo Tetris, com o loop principal parecido com isso.
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
Até agora, tudo no jogo acontece instantaneamente - as coisas são geradas instantaneamente, as linhas são removidas instantaneamente etc. Mas e se eu não quiser que as coisas aconteçam instantaneamente (ou seja, animar coisas)?
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
No meu clone Pong, isso não foi um problema, pois todos os quadros que eu estava apenas movendo a bola e procurando colisões.
Como posso entender minha questão? Certamente, a maioria dos jogos envolve alguma ação que leva mais do que um quadro, e outras coisas param até a ação ser concluída.
Action
classe e uma fila de ações a serem executadas. Quando uma ação estiver concluída, remova-a da fila e execute a próxima ação etc. Muito mais flexível que uma máquina de estado.