Как масштабировать скорость движущегося объекта для каждого обновления на экране в соответствии с частотой кадров в секунду, чтобы она могла быть одинаковой скоростью при любом заданном частоте кадров в секунду? - PullRequest
0 голосов
/ 08 января 2020

Я делал игру на Python3, используя Pygame и PyOpenGL. Когда я тестирую игру на разных компьютерах, все они запускают код с разной частотой кадров и скоростью.

Пример кода:

#...
while True:
    character.x += 5
    character.draw()
    pygame.display.flip() #Updates the screen

Поскольку некоторые компьютеры могут работать через l oop Чем больше и меньше, тем меньше будет позиция х символа в определенное время после запуска кода на двух компьютерах одновременно. Как я могу получить текущий fps на экране и получить скаляр, который масштабирует скорость объекта в соответствии с fps?

Заранее спасибо,

Ноа

1 Ответ

1 голос
/ 08 января 2020

Вам нужно создать экземпляр pygame.time.Clock и затем вызывать Clock.tick один раз каждые l oop, чтобы установить частоту кадров и получить истекшее время

clock = pygame.time.Clock()
while True:
    delta = clock.tick(60) # 60 FPS

Умножьте свою скорость движения на эту дельту для плавной и последовательной анимации (вам может потребоваться уменьшить значение дельты здесь, поскольку истекли миллисекунды, которые могут быть большими)

    character.x += 5 * delta
...