← Все вопросы

Зачем нужен clock.tick() в pygame и почему игра летает с разной скоростью?

Задан 7 месяцев назад1к просмотров2 ответа
7

У друга на ноуте мой персонаж двигается нормально, а на моём компе носится как ужаленный. Код один и тот же! Вычитал, что надо что-то с clock.tick. Объясните, зачем оно и как поставить нормальную скорость.

2 ответа

12
✓ Принятый ответ — помог автору

Без ограничения игровой цикл крутится так быстро, как позволяет железо. На мощном компе — тысячи кадров в секунду, и за то же время персонаж сдвигается в разы дальше. Отсюда «носится как ужаленный».

clock.tick(60) притормаживает цикл, чтобы было не больше 60 кадров в секунду — одинаково у всех:

clock = pygame.time.Clock()   # один раз до цикла

while running:
    # ... события, логика, отрисовка ...
    pygame.display.flip()
    clock.tick(60)            # держим 60 FPS, в самом конце кадра

Ставь clock.tick(60) в самом конце цикла. Это разом лечит и «слишком быструю» игру, и загрузку процессора на 100%.

5

Идеально честный способ — ещё и умножать скорость на время кадра (dt), который возвращает tick: dt = clock.tick(60) / 1000 и x += speed * dt. Тогда даже при просадках FPS скорость в пикселях-в-секунду остаётся ровной. Но для первых игр хватит просто clock.tick(60) и фиксированной скорости.

Ваш ответ

Войдите, чтобы ответить на вопрос.