2017-04-25 74 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