Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'animation avec JLayeredPane

Sujet résolu
    5 mai 2010 à 16:22:44

    Bonjour à tous, ;)

    dans la continuation de mon projet je me suis heurté sur un très gros problème que je n'arrive pas à régler depuis quelques semaines maintenant...

    Il s'agit d'une animation que je souhaite faire à un composant (Label) de ma JLayeredPane lorsque actionPerformed s'est enclenché.

    Avec toutes les méthodes de pauses entre deux "frames" je rencontre le même problème (swing timer ou thread.sleep, je n'ai pas encore essayé avec un thread mais je pense que le problème vient de mon utilisation de la méthode sprite.setLocation(x,y))

    Le bout de code que je veux faire marcher est celui-ci

    public void moveCharTest()
        {
            int z = 0;
            z = getPlayerPixelCoordinateX();
            for(int i = 0; i<5; i++)
            {
                z -=5;
                heroLabel.setLocation(z,getPlayerPixelCoordinateY());
                
    
                getTime().wait(1000); //méthode d'attente
                
    
    
    
            }
    
        }
    


    C'est un timer qui appelle cette fonction. Lorsque je remplace setLocation par des System.out.println("") ça s'affiche plusieurs fois dans la console (donc tout va bien)
    Lorsqu'il s'agit de setLocation le programme est mit en attente pour le temps COMPLET de for et ne m'affiche qu'une seule frame "finale" après avoir attendu.

    Je vois pas par ou commencer... Help! :)
    • Partager sur Facebook
    • Partager sur Twitter
      5 mai 2010 à 16:45:36

      C'est pas une manip que je fais très souvent et il y a peut-être une solution simple à ton problème mais as-tu regardé du côté de SwingWorker ?
      • Partager sur Facebook
      • Partager sur Twitter
        5 mai 2010 à 17:01:41

        Et si tu met 5 fois la méthode sans passer par une boucle ça fonctionne ?
        (c'est juste pour tester)
        • Partager sur Facebook
        • Partager sur Twitter
          5 mai 2010 à 17:05:33

          z varie (par "z -=5")

          sinon tu a vérifié que tu passes bien 5 fois dans ta boucle quand tu fais un selLocation (un System.out.println en plus quoi)
          • Partager sur Facebook
          • Partager sur Twitter
            5 mai 2010 à 17:26:57

            Hey,
            merci pour vos réponses rapides!

            z varie en effet et oui avec un println le texte s'affiche bien 5 fois.
            Je suis en train de lire un article sur SwingWorker sur developpez comme proposé par Javier:

            http://rom.developpez.com/java-swingworker/

            Ca doit être un problème d'ordre de tâches dans l'EDT je pense... Je vais essayer d'adapter le SwingWorker sur mon heroLabel en attendant de voir du nouveau...! :)

            ===================================================


            Edit mais j'ai trouvé la solution!!

            J'ai eu recours à Swing Worker comme proposé et ça marche comme sur des roulettes!
            L'affichage se fait correctement étant donné que le thread travaille sur la GUI directement!

            Un grand merci à Javier, jonkille et ferl :D!!!!
            • Partager sur Facebook
            • Partager sur Twitter

            Problème d'animation avec JLayeredPane

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown