Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Timer JAVA

Projet cours

Sujet résolu
    21 mai 2012 à 17:46:37

    Bonjour,

    Actuellement je travaille sur un projet de JAVA de type PACMAN avec certaines différences.

    Mon pion doit se déplacer comme dans le PACMAN classique pour manger les pions de la grille.
    Cependant, ces pions disparaissent et au bout de 5 secondes réapparaissent.

    Mon problème est le suivant, j'arrive a déplacer le pacman, à manger les pions, ainsi que à la faire réapparaître au bout de 5secondes si je ne me suis pas redéplacer dans les 5secondes. Cependant, si je me déplace plusieurs fois dans l'intervalle de 5 seconde, alors seul le dernier mouvement est pris en compte et donc le dernier pion réapparait mais pas les autres.

    J'ai essayé de "jouer" avec les Timer et TimerTask mais rien a faire... pourriez vous m'aider ??? :D

    // Génération du compteur de 5 secondes:
        
    // j'ai déclaré en public au dessus dans ma classe i et j;
    
    public int i;
    public int j;
        
        public void Reminder(int seconds, int x, int y) { // au moment du déplacement on appelle la fonction avec x et y qui correspondent au pion mangé
           timer.schedule(new RemindTask(), seconds*1000);
           j = x;
           i = y;
        }
    
         class RemindTask extends TimerTask {
            public void run() {
                compteurPion(strBase, i, j); // au bout de mon délais j'appelle la fonction qui va mettre a jour le pion mangé pour pouvoir le repeindre
                System.out.println("---- Reminder ----");
                System.out.println("i :"+i+"j :"+j);
            }
    
        }
    
        // **************************************************************
    
        public void compteurPion(String strTmp, int x, int y){
    
            
             tmpTab = strToTab(strTmp); // correspond au tableau de jeu. méthode créée pour transformer la string en tab
    
             System.out.print("Bienvenur dans compteur pion");
             tmpTab[y][x] = '0';
             strBase = tabtoStr(tmpTab); // correspond au tableau de jeu. méthode créée pour transformer le tag en sting
             repaint();
    
        }
    



    Mon problème est exact, est que quand je RAPPELLE la fonction en moins de 5 secondes, forcement ça remet à jour le x et y de la position du pion mangé et donc oublie l'ancienne position du pion mangé.

    Il faudrait stocké "temporairement" cette position mais comment faire....

    Si par avance quelqu'un a une idée merciiiii :):):):):magicien:
    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2012 à 17:59:59

      Pourquoi ne pas stocker les coordonées dans la classe RemindTask et les passer en parametre au constructeur :

      // Génération du compteur de 5 secondes:
          
          public void Reminder(int seconds, int x, int y) { // au moment du déplacement on appelle la fonction avec x et y qui correspondent au pion mangé
             timer.schedule(new RemindTask(x,y), seconds*1000);
          }
      
           class RemindTask extends TimerTask {
              public int x;
              public int y;
       
              public RemindTask(int x, int y)
              {
                  this->x = x;
                  this->y = y;
              }
      
              public void run() {
                  compteurPion(strBase, x, y); // au bout de mon délais j'appelle la fonction qui va mettre a jour le pion mangé pour pouvoir le repeindre
                  System.out.println("---- Reminder ----");
                  System.out.println("i :"+x+"j :"+y);
              }
          }
      
          // **************************************************************
      
          public void compteurPion(String strTmp, int x, int y){
      
              
               tmpTab = strToTab(strTmp); // correspond au tableau de jeu. méthode créée pour transformer la string en tab
      
               System.out.print("Bienvenur dans compteur pion");
               tmpTab[y][x] = '0';
               strBase = tabtoStr(tmpTab); // correspond au tableau de jeu. méthode créée pour transformer le tag en sting
               repaint();
      
          }
      
      • Partager sur Facebook
      • Partager sur Twitter
        21 mai 2012 à 19:17:08

        Oui, ça marche beaucoup mieux.

        Merci beaucoup ! :D^^
        • Partager sur Facebook
        • Partager sur Twitter

        Problème Timer JAVA

        × 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