Nigdy wcześniej tak naprawdę nie zajmowałem się programowaniem gier, dość proste pytanie.
Wyobraź sobie, że buduję grę Tetris, w której główna pętla wygląda mniej więcej tak.
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
Jak do tej pory wszystko w grze dzieje się natychmiast - rzeczy są odradzane natychmiast, rzędy są usuwane natychmiast itp. Ale co, jeśli nie chcę, aby coś się stało natychmiast (tj. Animacja)?
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
W moim klonie Pong nie było to problemem, ponieważ każdą klatkę po prostu poruszałem piłką i sprawdzałem kolizje.
Jak mogę owinąć głowę tym problemem? Z pewnością większość gier wymaga akcji wymagającej więcej niż klatki, a inne rzeczy zatrzymują się do momentu wykonania akcji.
Action
klasę i kolejkę działań do wykonania. Po zakończeniu akcji usuń ją z kolejki i wykonaj następną akcję itp. O wiele bardziej elastyczna niż automat stanów.