[pygame] Comparaison de temps buggée ?
Bonsoir,
Je suis en train de réaliser une classe qui a pour but de gèrer des images animées. Cependant je me heurte à un problème incompréhensible ou alors je suis vraiment pas frais...
Voici le code de la classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| import pygame
from pygame.locals import *
from os.path import join
class AnimatedImage:
def __init__(self):
self.images = {}
self.data = []
self.frame = 0
self.last_time = 0
def load(self, path):
lines = []
with open(join(path, "animation.txt"), "r") as f:
content = f.read()
lines = content.split("\n")
for line in lines:
values = line.split(" ")
imgpath = values[0]
time = values[1]
if not imgpath in self.images:
self.images[imgpath] = pygame.image.load(join(path, imgpath))
self.data.append([imgpath, time])
def surface(self):
current_time = pygame.time.get_ticks()
print current_time - self.last_time, self.data[self.frame][1], current_time - self.last_time > self.data[self.frame][1]
if current_time - self.last_time > self.data[self.frame][1]:
self.last_time = current_time
if self.frames > len(self.data)-1 :
self.frames = 0
else:
self.frames += 1
return self.images[self.data[self.frame][0]]
if __name__ == "__main__":
run = 1
img = AnimatedImage()
img.load("test")
pygame.init()
screen = pygame.display.set_mode((600,400))
while(run):
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
run = 0
screen.fill((0,0,0))
screen.blit(img.surface(), (0,0))
pygame.display.flip() |
Cependant, l'image ne change pas.
Comme vous avez pu le remarquer, j'ai introduit une ligne avec print pour débogguer :
Code:
print current_time - self.last_time, self.data[self.frame][1], current_time - self.last_time > self.data[self.frame][1]
Voici ce que j'ai :
Code:
1 2 3 4 5 6
| ...
2500 50 False
2501 50 False
2502 50 False
2503 50 False
... |
Je ne comprends pas pourquoi la condition logique (3eme entrée) est évaluée comme fausse alors que l'on voit bien que le premier élement est supérieur au second.
Merci de bien vouloir m'aider, si ça se trouve c'est tout bête en plus !