背景
我正在开发一款我正在添加'速度'模式的Android游戏 - 在这里,玩家将尝试在最快的时间内完成任务,而不是高分,所花费的时间越短,他们将在排行榜上越高。
问题
现在,这是一款用OpenGL ES 2.0编写的游戏 - 它以每秒60个刻度(游戏逻辑更新)运行,并以设备可以处理的速度呈现。它使用固定的Delta Time(1f / Ticks_Per_Second)。
基本上,每个游戏节拍每16.66毫秒发生一次,但我需要计算并显示厘秒(10毫秒) - 如何?
如果我持有变量并说出类似的话:
timePassed++; //Increase this each tick
然后在1秒钟(60蜱)之后,我只计算到60,我可以这样解决这个问题:
timePassed+=1.666666666666667;
现在1秒后,timePassed = 100(这最终是我想要的)。然后,我可以通过除以100并截断到2位小数来获得实际时间(以秒为单位)。 (或者只使用它作为秒的百分之一,并使用单独的变量秒和分钟)。每一次打勾,我也会做出这种改变。
这个问题是我总是'跳过'一些值,因为我每秒只更新60次 - 而不是100次。
系统计时器
我也可以用毫秒或纳秒来获取时间,然后当游戏结束时,再次抓住它并找出差异,但是,我预见到类似的问题,因为我只是每隔60分钟查询差异第二
同样,我可以在另一个线程上运行计时器,但同样,我只会以1/60秒的倍数查询它。
希望我已经很好地解释了这个问题,如果需要更多信息,请询问。
答案 0 :(得分:0)
IMO第一种方法并不是非常可靠,因为你不是计算帧而不是时间。我会使用系统计时器,并尝试将游戏逻辑与渲染分离。所以你会有:
核心逻辑 - >每隔10毫秒生成一个领导板
渲染 - >每16毫秒