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

GUI Python Discussion :

Problème avec l'animation d'une balle


Sujet :

GUI Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Points : 11
    Points
    11
    Par défaut Problème avec l'animation d'une balle
    Bonsoir à tous !
    J'essaie d'animer une balle dans un labyrinthe. L'idée est de la faire avancer dans une direction jusqu'à rencontrer un mur puis de la faire changer de direction aléatoirement. Voici ce que cela donne (méthode associée à la balle) :

    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
     
    def moveAtRandom(self):
            while self.alive==True:
                rand=randint(0,3)
                if rand==0:
                    while self.stop==False:
                        self.moveL()
                        time.sleep(0.5)
                elif rand==1:
                    while self.stop==False:
                        self.moveR()
                        time.sleep(0.5)
                elif rand==2:
                    while self.stop==False:
                        self.moveU()
                        time.sleep(0.5)
                else:
                    while self.stop==False:
                        self.moveD()
                        time.sleep(0.5)
                self.stop=False
    Mon problème est que visuellement la balle n'avance pas dans l'affichage Tk alors même que ses coordonnées évoluent bel et bien (j'ai vérifié avec un print). Le problème ne semble pas venir des méthodes move (qui permettent de déplacer la balle dans les 4 directions) : je les ai testées et retestées avec des bind. Self.stop devient faux lorsque la balle rencontre un mur. La aussi cela semble marcher bien d'après l'évolution des coordonnées de la balle.
    Il ne reste plus que les while. Le code ainsi fait ne fait que planter TK sans message d'erreur aucun. J'ai essayé avec une seule direction, la balle ne se déplace dans le canvas qu'à la fin du while (de sa position initiale, elle va directement à sa position finale). J'ai essayé d'utiliser un multiple threading, sans succès :/ je ne comprends vraiment pas ce qui se passe !
    Merci de votre aide !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    J'ai finalement résolu le problème. Il suffisait de l'inclure dans un thread et d'utiliser time.sleep(). voilà le code final:
    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
     
    class ThreadIA(threading.Thread):
        def __init__(self,IA):
            threading.Thread.__init__(self)
            self.IA=IA
     
        def run(self):
            while self.IA.alive==True:
                rand=randint(0,3)
                if rand==Or.L:
                    while self.IA.stop==False:
                        self.IA.moveL()
                        time.sleep(0.5)
                elif rand==Or.R:
                    while self.IA.stop==False:
                        self.IA.moveR()
                        time.sleep(0.5)
                elif rand==Or.U:
                    while self.IA.stop==False:
                        self.IA.moveU()
                        time.sleep(0.5)
                else:
                    while self.IA.stop==False:
                        self.IA.moveD()
                        time.sleep(0.5)
                self.IA.stop=False    
     
        def stop(self):
            self.IA.alive=False

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

Discussions similaires

  1. [Box2D] Problème avec la vitesse d'une balle
    Par Emilie L. dans le forum Physique
    Réponses: 1
    Dernier message: 29/09/2010, 15h29
  2. problèmes avec "include file" pour une page asp
    Par chipsense dans le forum ASP
    Réponses: 1
    Dernier message: 02/09/2005, 15h22
  3. [Débutant] Problème avec les paramètres d'une proc stockée
    Par babulior dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/06/2005, 15h38
  4. Problèmes avec un TWebBrowser dans une DLL
    Par bellamyjc dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/01/2005, 22h35
  5. Problème avec un LIKE dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2004, 14h38

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