Я никогда прежде не занимался программированием игр, довольно простой вопрос.
Представьте, что я создаю игру «Тетрис», где основной цикл выглядит примерно так.
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
Пока что все в игре происходит мгновенно - вещи порождаются мгновенно, строки удаляются мгновенно и т. Д. Но что, если я не хочу, чтобы что-то происходило мгновенно (то есть, анимация)?
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
В моем клоне Понг это не было проблемой, поскольку каждый кадр я просто перемещал мяч и проверял наличие столкновений.
Как я могу обернуть голову вокруг этой проблемы? Конечно, большинство игр включает в себя некоторые действия, которые занимают больше кадра, а другие вещи останавливаются до тех пор, пока действие не будет выполнено.
Action
класс и очередь действий для выполнения. Когда действие завершено, удалите его из очереди и выполните следующее действие и т. Д. Более гибкий, чем конечный автомат.