Что такое игровой цикл (game loop) и зачем он нужен в каждой игре?
Во всех примерах pygame есть while running: и внутри всё происходит. Я вроде скопировал и работает, но не понимаю — что это за цикл и зачем он. Почему нельзя просто нарисовать один раз?
2 ответа
Игра — это не картинка, а движущаяся картинка. Экран нужно перерисовывать много раз в секунду, иначе ничего не будет двигаться и реагировать. Этот бесконечный while и называется игровым циклом: каждый его проход — один кадр.
В каждом кадре игра делает три вещи, всегда в таком порядке:
while running:
# 1. СОБЫТИЯ — что нажал игрок
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 2. ЛОГИКА — двигаем объекты, считаем столкновения
x += 1
# 3. ОТРИСОВКА — рисуем новый кадр
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (255, 0, 0), (x, 100, 50, 50))
pygame.display.flip()
Если нарисовать один раз без цикла — игра нарисует кадр и сразу закроется (или зависнет). Цикл крутится, пока игрок не выйдет.
Короткая аналогия: игровой цикл — это как мультик из кадров. Каждый оборот цикла = один кадр. Двигаешь объект на чуть-чуть, перерисовываешь — и за счёт того, что это происходит 60 раз в секунду, глаз видит плавное движение.