【问题标题】:How to use delta milliseconds to do something every x milliseconds?如何使用 delta 毫秒每 x 毫秒执行一次操作?
【发布时间】:2012-03-23 21:45:56
【问题描述】:

我正在使用一个计时系统,我得到了增量(每帧通过的毫秒数,60 fps)。

在我使用计时之前,我计算了帧数并做了这样的事情:

if(frames % 60 == 0) /*do something*/;
frames++;

但我不能对 delta 使用相同的东西:

if(milliseconds % 1000 == 0) /*do something*/;
milliseconds += delta;

Delta 每次都在变化,毫秒不会是每秒 1000 的倍数。

(我使用的是 Java,但这并不重要。)

编辑:

来自 Stas Makutin 的 if(milliseconds - prev_milliseconds >= 1000) 在大多数情况下都有效。 但是在我的部分代码中,有这样的东西:

if(frames % 60 == 0){ 
  ...
}
if(frames % 60 == 30){
  ...
}

if(frames % 40 == 0){
  ...
}

有没有办法在不使用 prev_millisecond1、prev_millisecond2 等的情况下做到这一点(即多个 prev_millisecond 变量。)

【问题讨论】:

    标签: timing delta timedelta


    【解决方案1】:

    可能这样的事情会起作用:

    prev_milliseconds = 0;
    
    ...
    
    if (milliseconds - prev_milliseconds >= 1000) 
    {
       /* do somthing */
       prev_milliseconds = milliseconds;
    }
    milliseconds += delta;
    

    但如果您的代码在每一帧之后仍然触发,为什么不继续计数帧并使用您的旧代码?

    【讨论】:

    • 我以前只计算帧数,但我想添加更准确的计时(因为我的程序在不同的计算机上以不同的速度运行)。所有对象移动的速度曾经是像素/帧,但现在我将所有内容更改为像素/秒。
    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 2019-05-06
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2016-07-20
    • 1970-01-01
    相关资源
    最近更新 更多