【问题标题】:Calculating elapsed time using delta使用 delta 计算经过的时间
【发布时间】:2015-04-13 15:57:29
【问题描述】:

我的代码一定是犯了一些愚蠢的错误,在我的脑海中这应该可以工作,但是计时器工作得太快了(我想在几秒钟内获得剩余时间)。

我的代码:

timeElapsed = 0;
timeLeft = 60;
//delta = time it took to get through one frame (60 fps). 

timeElapsed += delta/getFramesPerSecond(); //FPS = 60f
timeLeft -= timeElapsed; //timeLeft starts at 60 (seconds)
timeDisplay = "Time left: " + timeLeft;

我检查了 FPS 始终为 60,我在这里缺少什么?

Delta 样本打印:

0.016969847
0.017038532
0.017123796
0.017026689
0.016969848
0.017059453
0.01697774
0.016987609
0.017073665
0.017035767
0.01708432

【问题讨论】:

  • 可能的整数除法给 0 这将使 timeLeft 总是有 60
  • 对不起,我应该指定所有变量都是浮点数
  • 对所示示例尚无定论。 timeElapsetimeLeftdelta 的原始值是多少? timeDisplay 是打印出来还是应该更改 UI 上的标签?你试过调试吗?
  • @gtgaxiola 我添加了信息:) 时间正在按预期打印
  • 从收集到的信息来看,delta 似乎计算为零。

标签: java math timedelta


【解决方案1】:

timeElapsed+timeLeft 应该是一个常数(因此两者都应该在相反方向上变化相同的量),但是,您将 timeLeft 反复减少 timeElapsed

timeElapsed 中的步骤 1 的演示示例中,您的代码给出了

timeElapsed   timeLeft
    0            60
    1            59
    2            57
    3            54
    4            50
    5            45
    6            39
    7            32

把代码改成

timeDelta    = delta/getFramesPerSecond(); 
timeElapsed += timeDelta; 
timeLeft    -= timeDelta; 
timeDisplay  = "Time left: " + timeLeft;

【讨论】:

猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
相关资源
最近更新 更多