Java while循环计时

Java while循环计时,java,lwjgl,Java,Lwjgl,我正在制作一个Java游戏,我被困在如何轻松计时上。我知道存在增量时间,但这意味着我必须在几乎每个移动/更新函数中插入增量变量 我想知道我是否可以对游戏的主While循环计时,使其每50毫秒运行/循环一次,而不是尽可能快。位置的变化是时间的函数,因此必须将时间增量传递到大多数更新游戏状态的函数中。这是很自然的事情;我不会担心这样做 虽然可以在每一帧中插入延迟(您几乎肯定希望这样做,因为以1000 fps的速度运行游戏毫无意义),但让您的更新逻辑假设每一帧将占用预设的时间通常是有害的。当一帧恰好比

我正在制作一个Java游戏,我被困在如何轻松计时上。我知道存在增量时间,但这意味着我必须在几乎每个移动/更新函数中插入增量变量


我想知道我是否可以对游戏的主While循环计时,使其每50毫秒运行/循环一次,而不是尽可能快。

位置的变化是时间的函数,因此必须将时间增量传递到大多数更新游戏状态的函数中。这是很自然的事情;我不会担心这样做

虽然可以在每一帧中插入延迟(您几乎肯定希望这样做,因为以1000 fps的速度运行游戏毫无意义),但让您的更新逻辑假设每一帧将占用预设的时间通常是有害的。当一帧恰好比其他帧需要更长的时间时,这样做会导致起伏

为使游戏具有一定的帧速率,每个帧的一般方法如下:

  • 将当前时间记录为
    startTime
  • 执行状态更新
  • 重画
  • 将当前时间记录为
    endTime
  • 睡眠时间
    (1/帧率)-(结束时间-开始时间)

您似乎误解了“增量时间”的含义。有一个循环,在开始时记录开始时间,在结束时记录结束时间。您睡眠X-(处理所有事件的时间)。帧率是我想要的变量吗?而endTime startTime总是会给出一个大于1的正强度,这会导致负睡眠?@NeHatchickVerma:帧速率类似于“每秒60帧”,当倒转时是每帧1/60秒。如果我们假设时间以秒为单位(通常是毫秒,但这是一个简单的转换)。这可能会导致负值,但通常不会。如果它是负值,就不要睡觉。好吧,结束时间总是大于开始时间,如果你从一个小于一的数字中减去它,它总是负值。@NeHatchickVerma:如果你的结束时间和开始时间是用相同的单位来度量的,就不会。例如,计时机制可能会以浮点秒为单位给出日期。如果以毫秒为单位,那没问题:
1/60帧/秒=~.017秒/帧=17毫秒/帧
。总是协调你的单位。哦,我明白了,让我试试这个!