2017-08-02 3 views
0

J'ai un petit problème dans mon code libGDX:libGDX: Comment puis-je faire quelque chose après toutes les tâches de la course() - méthode dans un TimerTask

tsk = new TimerTask() { 
     @Override 
     public void run() { 

      Gdx.app.log("Timer", "I'm working"); 
     } 
    }; 

    timer.schedule(tsk, 0, 500); 

Je veux faire quelque chose dans mon jeu, si toutes les tâches de la méthode run() sont terminées. Je sais juste, je dois faire quelque chose avec isEmpty(), mais je ne sais pas comment je fais cela.

Merci pour toute solution/aide! :)

Répondre

0

Vous pouvez essayer quelque chose comme ceci:

1) Créer une TimerTask personnalisée qui implémente une API qui indique que la tâche est fait (permet de l'appeler isDone()).

2) Tenez une liste de ces tâches.

3) Lorsque vous voulez vérifier isEmpty() il suffit de parcourir toutes les tâches et de vérifier si tous retournent vrai pour isDone().

Ainsi, votre code sera quelque chose comme:

public static class Solution { 

    private Timer timer = new Timer(); 

    public abstract static class MyTimerTask extends TimerTask { 
     private boolean done; 
     public boolean isDone() { return done;} 
     public void setDone() { done = true;} 

     @Override 
     public void run() { 
      setDone(); 
     } 

     public abstract void performTask(); 
    } 

    private ArrayList<MyTimerTask> list = new ArrayList<>(); 

    public boolean isEmpty() { 
     for (MyTimerTask task: list) { 
      if (!task.isDone()) 
       return false; 
     } 
     return true; 
    } 

    public void runTask(MyTimerTask task) { 
     list.add(task); 
     timer.schedule(task, 0, 500); 
    } 

    public void doSomething() { 
     MyTimerTask task = new MyTimerTask() { 

      @Override 
      public void performTask() { 
       Gdx.app.log("Timer", "I'm working"); 
      } 
     }; 
    } 
} 

Dans cet exemple, vous pouvez appeler runTask() avec votre tâche et isEmpty() pour vérifier si elle est faite. Je n'ai pas ajouté de code de nettoyage, mais cela devrait également être créé.

+0

Merci pour votre commentaire! Mais je ne comprends pas, pouvez-vous s'il vous plaît expliquer vos étapes plus et me montrer le code complet dans la classe? Merci :) – Eron

+0

J'ai mis à jour le code un peu, espérons que cela aide. –

+0

Ok merci, je pense que ça marchera, mais comment je peux commencer mon TimerTask et vérifier dans une autre classe si toutes les tâches sont terminées? – Eron