Je travaille actuellement sur un outil de feuille de sprite en python qui exporte l'organisation dans un document XML, mais j'ai eu quelques problèmes pour animer un aperçu. Je ne suis pas sûr de savoir comment chronométrer le taux de trame avec python. Par exemple, en supposant que j'ai toutes mes données de trames et fonctions de dessin appropriées, comment pourrais-je coder le timing pour l'afficher à 30 images par seconde (ou tout autre taux arbitraire).Python Animation Timing
4
A
Répondre
8
La meilleure façon de le faire est avec 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)
La deuxième façon la plus simple de le faire est manuellement:
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
0
Il y a une classe Timer
dans le module threading
. Il peut être plus pratique que d'utiliser time.sleep
à certaines fins.
>>> 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
0
Vous pouvez utiliser select? Il est couramment utilisé pour attendre la fin d'E/S, mais jeter un oeil à la signature:
select.select(rlist, wlist, xlist[, timeout])
, vous pouvez faire quelque chose comme:
timeout = 30.0
while true:
if select.select([], [], [], timeout):
#timout reached
# maybe you should recalculate your timeout ?
Merci, très utile. Je suis nouveau à Python, mais je travaille dur pour me familiariser avec lui. – eriknelson