2017-04-25 5 views
0

tick() 메서드에서는 int updateTime = System.nanoTime()을 계속 업데이트하므로 을 사용할 수 없습니다.틱 방식으로 경과 시간을 추적하는 방법은 무엇입니까?

내에서 경과 시간을 찾아야 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()'이 될 것이고, 현재의'nanoTime()'은 아닙니다. –

답변

0

당신은 너무처럼 tick() 방법 밖에 timeAtLastAccept을 유지해야합니다 :

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 위와 같이 객체를 생성 한 후 시간 변수를 업데이트하면됩니다. – CraigR8806

+0

"당신은 tick() 메소드 밖에서 timeAtLastAccept를 유지해야 할 것입니다."라고 말하면, 초기화 할 수있는 유일한 곳은 생성자입니다. 그리고 threshold = 2로 설정하면 _System.nanoTime() - timeAtLastAccept_가 항상 임계 값보다 커집니다. – badProgrammer