Non ho mai fatto molta programmazione di gioco prima, una domanda piuttosto semplice.
Immagina che sto costruendo un gioco Tetris, con il loop principale che assomiglia a qualcosa del genere.
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
Finora tutto nel gioco accade all'istante: le cose vengono generate all'istante, le righe vengono rimosse all'istante, ecc. Ma cosa succede se non voglio che le cose accadano all'istante (ad esempio animare le cose)?
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
Nel mio clone Pong questo non era un problema, dato che ogni fotogramma stavo solo muovendo la palla e controllando le collisioni.
Come posso avvolgere la testa attorno a questo problema? Sicuramente la maggior parte dei giochi prevede alcune azioni che richiedono più di un frame e altre cose si fermano fino a quando l'azione non viene eseguita.
Action
classe e una coda di azioni da eseguire. Quando un'azione è completa, rimuovila dalla coda ed esegui l'azione successiva, ecc. Molto più flessibile di una macchina a stati.