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

2D Java Discussion :

Pb d'animation


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Par défaut Pb d'animation
    Salut,
    j'ai un projet à faire sur les graphes, donc j'ai créé un interface en swing permettant d'ajouter un sommet une arete entre deux sommets j'utilise une JFrame et je dessine dans un JPanel.Une fois tout ça créé mon programme permet de calculer le plus court chemin entre deux points. Maintenant je voudrais faire avancé une boule sur mes aretes pour montrer le chemin. J'ai donc créé une classe boule dans laquelle j'ai mis une thread :
    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
    64
    65
    66
    67
     
     public void run()
    {
     
    	Sommet s = this.graphe.rechercheSommet(x,y).leSommet;
    	 while(s.predecesseur != null)
    	   {
    		 	double xa = s.x+(Sommet.largeurSommet/2);
    			double ya = s.y+(Sommet.largeurSommet/2);
    			double xd= s.predecesseur.leSommet.x+(Sommet.largeurSommet/2);
    			double yd = s.predecesseur.leSommet.y+(Sommet.largeurSommet/2);
     
    			double m=(yd-ya)/(xd-xa);
    			double p=(ya)-(m*xa);
    	if (xa<xd){	
    	   for ( int i=(int)xa;i<(int)xd;i++)
    	   {   
    		   try
    		   {
    			   sleep(50);
    		   }
    		   catch (InterruptedException e){
     
    		   }
    		   this.p.repaint();
    		   g.setColor(Color.RED);
    		   g.fillOval(i-10,(int)(m*i+p)-10,20,20);
     
     
    	   } 
     
     
    	   s = s.predecesseur.leSommet; 
     
    	   }
    	 else
    	 {
     
    		 for ( int i=(int)xa;i>(int)xd;i--)
    		   {   
    			   try
    			   {
    				   sleep(50);
    			   }
    			   catch (InterruptedException e){
     
    			   }
     
    			   this.p.repaint();
    			   g.setColor(Color.RED);
    			   g.fillOval(i-10,(int)(m*i+p)-10,20,20);
     
     
     
    		   } 
     
     
    		   s = s.predecesseur.leSommet; 
     
    		   } 
     
     
     
    	 }
     
     
    	  }
    La boule avance bien mais elle scintille je ne vois pas pourquoi, faut il que j'utilise plutot Graphics2D? Est ce le double buffering la solution? (Il parait que dans JPanel l'utilise par default).

    je vous remercie d'avance pour vos réponses.

  2. #2
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    C'est parce que tu dessines (les appels a g.XXX()) dans un thread qui n'est pas l'Event Dispatch Thread. Il faut faire tous tes dessins dans la methode paintComponent().

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Par défaut
    Citation Envoyé par Gfx
    C'est parce que tu dessines (les appels a g.XXX()) dans un thread qui n'est pas l'Event Dispatch Thread. Il faut faire tous tes dessins dans la methode paintComponent().
    Je comprends pas ta réponse, dans le constructeur de ma boule je lui passe en paramètre Graphics. Je vois pas comment faire pour le mettre dans ma fonction paintComponent() il me faut absolument une thread pour faire avancé ma boule.

  4. #4
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Il ne faut PAS passer d'objet Graphics. Ton thread va simplement appeler repaint(), tu le fais deja, et paintComponent() va dessiner. Le thread devra egalement modifier un parametre. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void run() {
      // ...
      p.setTime(time);
      p.repaint();
    }
    Et l'objet p dessinera en fonction de la valeur time. Exemple dans le code source ici : http://jroller.com/page/gfx?entry=real_world_physics_in_swing

    Developpez devrait egalement bientot mettre en ligne une presentation et une video dans lesquelles je parle des animations.

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Par défaut
    Voila ça marche je te remercie!!! je suis resté sur ce problème pendant plus de 3h croyant que ça venait du double buffering!!!!

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

Discussions similaires

  1. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54
  2. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11
  3. [Composants][Animation] Lire une vidéo compressée
    Par femtosa dans le forum Composants VCL
    Réponses: 6
    Dernier message: 03/09/2002, 08h03
  4. Rx Controls Gif animés
    Par toufou dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/08/2002, 14h09
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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