【问题标题】:LWJGL timer not working?LWJGL 定时器不工作?
【发布时间】:2013-06-22 12:48:45
【问题描述】:

我在控制台中不断收到很多“Delta: 0.0”,但很少有几行我收到类似“Delta: 9.999275207519531E-4”的信息,这是怎么回事?

    Timer timer = new Timer();
    float lastTime = 0.0f;
    timer.resume();
    while (!Display.isCloseRequested())
    {
        timer.tick();
        System.out.println("Delta: " + (timer.getTime() - lastTime));

        lastTime = timer.getTime();

        Display.update();
    }

    Display.destroy();

【问题讨论】:

    标签: java lwjgl timedelta delta


    【解决方案1】:

    永远不要在游戏循环中使用 java 的 Timer 类。它不够精确,无法可靠使用。相反,请查看this 链接以查看一些用 java 编写的可靠游戏循环。

    【讨论】:

      【解决方案2】:

      一个小提示,只是一个警告。你的计时机制有点缺陷。
      考虑到此代码在编写时逐行运行,您将“浪费”时间。这个

      System.out.println("Delta: " + (timer.getTime() - lastTime));
      lastTime = timer.getTime();
      

      代码执行以下操作:
      1. 获取当前时间。
      2. 做一些数学运算。
      3.调用String构造函数。
      4. 执行字符串连接。
      5. 将当前时间写入lastTime 变量。

      请注意,当前时间15 情况下是不同的。这意味着这个时间从“延迟:xx”输出中“丢失”。

      如果您继续在代码中使用(timer.getTime() - lastTime) 技术来获取上一次迭代的时间,您肯定会遇到不同的事件认为上一次迭代的时间不同的问题。我建议您使用以下代码进行计时:

      private double delta;
      private long timing;
      
      public void updateTime()
      {
          long newTime = System.nanoTime();
          this.delta = (newTime - this.timing) / 1_000_000_000.0;
          this.timing = newTime;
      }
      
      public double getDelta() {
          return this.delta;
      }
      

      updateTime() 在每个循环中调用一次,getDelta() 则在每次您想要从上一次迭代中经过的时间时调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多