IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques tierces Python Discussion :

[pygame] Comparaison de temps buggée ?


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    déjà c'est bizard, tu n'as pas initialisé le module time; get_ticks() devrait te retourner 0.
    bon sinon self.data[self.frame][1] c'est du texte et non pas un nombre ^^
    tu vois ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    values = line.split(" ") # du texte
    time = values[1] # du texte
    self.data.append([imgpath, time]) # et encore du texte

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut
    Ah c'était donc ça
    Je trouvais python tellement confortable par rapport au C/C++ que j'avais oublié l'existence des types de variables

    Merci beaucoup à toi, ça fonctionne vraiment bien maintenant

    PS : Voici la définition de pygame.time.get_ticks() sur la doc :

    Return the number of millisconds since pygame.init

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison de temps machine
    Par Dramac dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 27/04/2009, 22h56
  2. comparaison des temps d'execution de tris
    Par canary dans le forum Langage
    Réponses: 4
    Dernier message: 03/04/2008, 23h31
  3. Comparaison de temps
    Par franco263 dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/06/2007, 16h27
  4. Réponses: 2
    Dernier message: 24/04/2007, 22h03
  5. [MySQL] probleme requete avec comparaison du temps ecoule
    Par arnogef dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/11/2006, 20h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo