2017-04-25 6 views
0

Dans une méthode tick(), vous ne pouvez pas avoir un int startTime = System.nanoTime() car il sera constamment mis à jour.Comment suivre le temps écoulé dans une méthode de tick?

Je dois trouver le temps écoulé dans la méthode de graduation, de sorte que toutes les 2 secondes un nouvel objet soit généré.

public void tick() { 

    long startTime = System.nanoTime(); 

     // wave 1 
     if (wave == 1) { 

      float k = System.nanoTime() - startTime; 
      /* won't work because "startTime" is constantly updating */ 

      if (k >= 2 && k <= 3) { 
       handler.addObject(new BasicEnemy()); 
      } else if (k >= 4 && k <= 5) { 
       handler.addObject(new BasicObject()); 
      } else if (k >= 6 && k <= 7) { 
       handler.addObject(new BasicEnemy()); 
      } 
     } 

     // wave 2 
     if (wave == 2) { 

      float k = System.nanoTime() - startTime; 
      /* won't work because "startTime" is constantly updating */ 

      if (k >= 2 && k <= 3) { 
       handler.addObject(new BasicEnemy()); 
      } else if (k >= 4 && k <= 5) { 
       handler.addObject(new BasicObject()); 
      } else if (k >= 6 && k <= 7) { 
       handler.addObject(new BasicEnemy()); 
      } 
     } 
    } 
} 

Ce qui précède est un petit extrait du code. Comment est-ce que je pourrais trouver le temps écoulé dans la méthode de tick et le faire redémarrer son compte pour chaque instruction if?

Merci pour l'aide :)

+0

Vous utilisez des fils? Je ne vois aucun fil dans votre code ... – px06

+0

@ px06 J'ai seulement un fil dans ma classe principale, suis-je censé en avoir plus pour que ça marche? – badProgrammer

+0

"/ * ne fonctionnera pas car" startTime "est constamment mis à jour * /" Qu'est-ce qui vous fait penser cela? 'startTime' sera toujours le' nanoTime() 'au début de la méthode, pas le _current_' nanoTime() '. –

Répondre

0

Vous devrez tenir la timeAtLastAccept en dehors de la méthode tick() comme ceci:

long timeAtLastAccept = System.nanoTime(); 
public void tick(){ 
    if(System.nanoTime()-timeAtLastAccept >threshold) { 
     //Spawn your objects! 
     timeAtLastAccept = System.nanoTime(); 
    } 

    //do ticky things 
} 
+0

Je l'ai fait initialement, cependant, il engendre continuellement l'objet toutes les 2 secondes. – badProgrammer

+0

@badProgrammer si vous mettez à jour votre variable de temps après qu'elle a engendré un objet comme indiqué ci-dessus. Il devrait attendre encore 2 secondes avant d'engendrer un autre – CraigR8806

+0

Quand vous dites "Vous devriez maintenir le timeAtLastAccept en dehors de la méthode tick()", le seul endroit où je peux l'initialiser serait dans le constructeur. Et si je fais le seuil = 2, _System.nanoTime() - timeAtLastAccept_ sera toujours plus grand que le seuil. – badProgrammer