Зачем нужен clock.tick() в pygame и почему игра летает с разной скоростью?
У друга на ноуте мой персонаж двигается нормально, а на моём компе носится как ужаленный. Код один и тот же! Вычитал, что надо что-то с clock.tick. Объясните, зачем оно и как поставить нормальную скорость.
2 ответа
Без ограничения игровой цикл крутится так быстро, как позволяет железо. На мощном компе — тысячи кадров в секунду, и за то же время персонаж сдвигается в разы дальше. Отсюда «носится как ужаленный».
clock.tick(60) притормаживает цикл, чтобы было не больше 60 кадров в секунду — одинаково у всех:
clock = pygame.time.Clock() # один раз до цикла
while running:
# ... события, логика, отрисовка ...
pygame.display.flip()
clock.tick(60) # держим 60 FPS, в самом конце кадра
Ставь clock.tick(60) в самом конце цикла. Это разом лечит и «слишком быструю» игру, и загрузку процессора на 100%.
Идеально честный способ — ещё и умножать скорость на время кадра (dt), который возвращает tick: dt = clock.tick(60) / 1000 и x += speed * dt. Тогда даже при просадках FPS скорость в пикселях-в-секунду остаётся ровной. Но для первых игр хватит просто clock.tick(60) и фиксированной скорости.