安卓游戏计时器:以每秒60帧(16.66ms)的速度运行时,计时10ms



背景

我正在开发一款安卓游戏,我在其中添加了一个"速度"模式-在这里,玩家将尝试在尽可能快的时间内完成任务,而不是高分-所花的时间越短,他们在排行榜上的排名就越高。

问题

现在,这是一款用OpenGL ES 2.0编写的游戏——它以每秒60次的速度运行(游戏逻辑更新(,并以设备所能处理的最快速度渲染。它使用固定的增量时间(1f/Ticks_Per_Second(。

基本上,每16.66ms发生一次比赛,但我需要计算和显示厘米秒(10ms(-如何?

如果我持有一个变量,并说类似的话:

timePassed++; //Increase this each tick

然后在1秒后(60次勾选(,我只会数到60次,我可以这样绕过:

timePassed+=1.666666666666667;

现在1秒后,timePassed=100(这最终是我想要的(。然后,我可以通过除以100并截断到小数点后2位来获得以秒为单位的实际时间。(或者只将其用作百分之一百秒,并使用单独的变量表示秒和分钟(。每打一次勾,我也会做出这种改变。

问题是,我总是"跳过"一些值,因为我每秒只更新60次,而不是100次。

系统计时器

我也可以用毫秒或纳秒来计算时间,然后当游戏结束时,再次计算并计算出差异,然而,我预见到了类似的问题,因为我只每隔60秒查询一次差异。

类似地,我可以在另一个线程上运行计时器,但同样,我只会以1/60秒的倍数查询它。

希望我已经很好地解释了这个问题,如果需要更多信息,请询问。

IMO第一种方法不是很可靠,因为你计算的是帧而不是时间。我会使用系统计时器,并尝试将游戏逻辑与渲染脱钩。因此,您将拥有:
核心逻辑-->每10ms生成一个领导板
渲染-->每16ms

最新更新