#python #windows #pygame
Вопрос:
Я тренируюсь в pygame и мне было интересно, как мы можем сделать так, чтобы частота кадров не влияла на скорость выполнения игры
Я бы хотел, чтобы FPS не был заблокирован, а игра всегда работала с одинаковой скоростью.
До сих пор я использовал эту pygame.time.Clock.tick
функцию, но скорость персонажа менялась в зависимости от количества кадров в секунду, чего я не хочу.
Ответ №1:
Вы должны рассчитать движение за кадр в зависимости от частоты кадров.
pygame.time.Clock.tick
возвращает количество миллисекунд с момента последнего вызова. Когда вы вызываете его в цикле приложения, это количество миллисекунд, прошедших с момента последнего кадра. Умножьте скорость объектов на затраченное время на кадр, чтобы получить постоянное движение независимо от кадров в секунду.
Например, определите расстояние в количестве пикселей, которое игрок должен перемещать в секунду ( move_per_second
). Затем вычислите расстояние на кадр в цикле приложения:
move_per_second = 500
FPS = 60
run = True
clock = pygame.time.Clock()
while run:
ms_frame = clock .tick(FPS)
move_per_frame = move_per_second * ms_frame / 1000
# [...]
Комментарии:
1. @Tangax Это зависит от. Вы имеете в виду, что хотите вычислить позиции в другом потоке? Обратите внимание, что для плавного перемещения положения объектов должны быть вычислены по крайней мере один раз за кадр. Если позиция не меняется, нет необходимости обновлять дисплей, а если дисплей не обновляется, нет необходимости обновлять позицию. Не стоит чрезмерно усложнять игровой процесс. Самое простое решение-это один цикл.