В настоящее время я работаю над инструментом листа спрайтов в python, который экспортирует организацию в документ xml, но я столкнулся с некоторыми проблемами, пытаясь оживить предварительный просмотр. Я не совсем уверен, как рассчитать частоту кадров с помощью python. Например, предполагая, что у меня есть все необходимые данные о кадрах и функции рисования, как мне кодировать синхронизацию, чтобы отображать ее со скоростью 30 кадров в секунду (или с любой другой произвольной скоростью).
Тайминг анимации Python
Ответы (3)
Проще всего это сделать с помощью Pygame:
import pygame
pygame.init()
clock = pygame.time.Clock()
# or whatever loop you're using for the animation
while True:
# draw animation
# pause so that the animation runs at 30 fps
clock.tick(30)
Второй самый простой способ сделать это вручную:
import time
FPS = 30
last_time = time.time()
# whatever the loop is...
while True:
# draw animation
# pause so that the animation runs at 30 fps
new_time = time.time()
# see how many milliseconds we have to sleep for
# then divide by 1000.0 since time.sleep() uses seconds
sleep_time = ((1000.0 / FPS) - (new_time - last_time)) / 1000.0
if sleep_time > 0:
time.sleep(sleep_time)
last_time = new_time
person
Daniel G
schedule
18.04.2010
Спасибо, очень полезно. Я новичок в Python, но усердно работаю над тем, чтобы лучше с ним познакомиться.
- person eriknelson; 18.04.2010
В модуле threading
есть класс Timer
. Это может быть удобнее, чем использование time.sleep
для некоторых целей.
>>> from threading import Timer
>>> def hello(who):
... print 'hello %s' % who
...
>>> t = Timer(5.0, hello, args=('world',))
>>> t.start() # and five seconds later...
hello world
person
Matt Anderson
schedule
18.04.2010
Вы могли бы использовать select ? Он обычно используется для ожидания завершения ввода-вывода, но взгляните на сигнатуру:
select.select(rlist, wlist, xlist[, timeout])
Итак, вы можете сделать что-то вроде:
timeout = 30.0
while true:
if select.select([], [], [], timeout):
#timout reached
# maybe you should recalculate your timeout ?
person
dzen
schedule
18.04.2010
тайм-аут для выбора в секундах. ОП хотел 30 кадров в секунду, поэтому я думаю, что это не сработает.
- person gazhay; 26.05.2018