Java 如何在滴答法中跟踪经过的时间?

Java 如何在滴答法中跟踪经过的时间?,java,timer,countdown,nanotime,Java,Timer,Countdown,Nanotime,在tick()方法中,不能有int startTime=System.nanoTime(),因为它会不断更新它 我需要在tick方法中找到经过的时间,以便每2秒生成一个新对象 public void tick() { long startTime = System.nanoTime(); // wave 1 if (wave == 1) { float k = System.nanoTime() - startTime;

在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());
            }
        }
    }
}
public void tick(){
long startTime=System.nanoTime();
//第1波
如果(波==1){
float k=System.nanoTime()-startTime;
/*因为“startTime”不断更新,所以不起作用*/

如果(k>=2&&k=4&&k=6&&k您需要在
tick()
方法之外保持
timeAtLastAccept
,如下所示:

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

    //do ticky things
}

你在使用线程吗?我在你的代码中看不到任何线程…@px06我的主类中只有一个线程,我应该有更多线程才能让它工作吗?/*不工作,因为“startTime”不断更新*/“你怎么会这么想?
startTime
将始终是
纳米时间()
在方法的开头,不是当前的
nanoTime()
。我最初是这样做的,但是,它每2秒连续生成一个对象。@如果您在生成一个对象后更新您的时间变量,如上图所示,它应该再等待2秒,然后再生成另一个对象“您需要在tick()方法之外保留timeAtLastAccept”,我唯一可以初始化它的地方是在构造函数中-timeAtLastAccept将始终大于阈值。@程序员您必须进行计算,将2秒转换为多少纳秒,这将是您的阈值,是的,我的意思是将其作为constructor@badProgrammer太好了!如果你成功了,你可以点击如果您愿意,请在我的帖子投票部分旁边打勾