2017-04-25 45 views
0

在tick()方法中,不能有int startTime = System.nanoTime(),因为它会不断更新它。如何使用记号方法跟踪已用时间?

我需要在tick方法内找到已用时间,以便每2秒钟产生一个新对象。

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()); 
      } 
     } 
    } 
} 

以上是代码的一小段代码。 我该如何去找到经过时间的滴答方法,并让它重新启动每个if语句的计数?

感谢您的帮助:)

+0

是否使用线程?我在你的代码中看不到任何线程... – px06

+0

@ px06我的主类只有一个线程,我应该有更多的工作来完成这个工作吗? – badProgrammer

+0

“/ *将不起作用,因为”startTime“不断更新* /”是什么让你觉得呢? 'startTime'将始终是方法开始时的'nanoTime()',而不是_current_'nanoTime()'。 –

回答

0

您将需要保持timeAtLastAccepttick()方法外,像这样:

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

    //do ticky things 
} 
+0

但是,我最初做到了这一点,但它每隔2秒不断产生对象。 – badProgrammer

+0

@badProgrammer如果你更新你的时间变量后它产生一个对象如上所示。它应该等待另外2秒钟,然后再产生另一个 – CraigR8806

+0

当你说“你需要在tick()方法之外保持timeAtLastAccept”时,我可以初始化它的唯一位置是在构造函数中。 如果我使阈值= 2,_System.nanoTime() - timeAtLastAccept_将始终大于阈值。 – badProgrammer