【问题标题】:How to keep track of the elapsed time in a tick method?如何在刻度方法中跟踪经过的时间?
【发布时间】:2017-04-25 17:01:32
【问题描述】:

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

以上是小sn-p的代码。 我将如何查找 tick 方法中的经过时间 并让它重新开始对每个 if 语句的计数?

感谢您的帮助:)

【问题讨论】:

  • 你在使用线程吗?我在您的代码中没有看到任何线程...
  • @px06 我的主课只有一个线程,我应该有更多线程来让它工作吗?
  • "/* 不起作用,因为 "startTime" 不断更新 */" 是什么让你这么认为? startTime 将始终是方法开头的 nanoTime(),而不是 当前 nanoTime()。

标签: java timer countdown nanotime


【解决方案1】:

您需要在tick() 方法之外保留timeAtLastAccept,如下所示:

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

    //do ticky things
}

【讨论】:

  • 我最初是这样做的,但是,它每 2 秒连续生成对象。
  • @badProgrammer 如果您在生成对象后更新时间变量,如上所示。它应该再等待 2 秒,然后再生成另一个
  • 当您说“您需要在 tick() 方法之外保留 timeAtLastAccept”时,我可以初始化它的唯一位置是在构造函数中。如果我将阈值设为 2,System.nanoTime()-timeAtLastAccept 将始终大于阈值。
  • @badProgrammer 您必须进行计算才能将 2 秒转换为多少纳秒,这将是您的阈值,是的,我的意思是让它成为类的属性并在构造函数内部初始化跨度>
  • @badProgrammer 太棒了!如果它适合你,你可以点击我帖子投票部分旁边的已接受复选标记
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多