我正在使用timer.performWithDelay
计算玩家完成关卡需要多长时间。我希望它可以测量到100秒(因为游戏是多人游戏,我不希望那里有太多关系)。
这是我做的:
local totaltime = 0
local function counter()
totaltime = totaltime + 0.01
print(totaltime)
end
timer1 = timer.performWithDelay( 10, counter, 0)
它导致每个"秒"持续约4秒。这是不实际还是某个地方有缺陷?
答案 0 :(得分:3)
当timer.preformWithDelay
的时间延迟小于帧之间的时间时,计时器将等到输入下一帧以调用该功能。
这意味着如果您的游戏运行速度为30或60 fps,那么您将拥有大约16或33毫秒的“帧ms”。因此,您可以放置的最小延迟是帧之间的延迟。
在您的情况下,您希望每1/100秒或10毫秒设置一次计时器。这意味着,因为您的帧很可能是16ms(60fps),所以每记录10ms,您实际上等待的是6ms。
现在你可以解决这个问题,如果你用100 FPS运行并因此达到了10 ms,但这不是值得推荐的。
AlanPlantPot为coronaLabs提供了以下解决方案的答案:
我会改用enterFrame函数。你的计时器不会在一毫秒内上升(它会在每帧中增加许多毫秒),但无论如何都没有人能够快速读取。
local prevFrameTime, currentFrameTime --both nil
local deltaFrameTime = 0
local totalTime = 0
local txt_counter = display.newText( totalTime, 0, 0, native.systemFont, 50 )
txt_counter.x = 150
txt_counter.y = 288
txt_counter:setTextColor( 255, 255, 255 )
group:insert( txt_counter )
和
local function enterFrame(e)
local currentFrameTime = system.getTimer()
--if this is still nil, then it is the first frame
--so no need to perform calculation
if prevFrameTime then
--calculate how many milliseconds since last frame
deltaFrameTime = currentFrameTime - prevFrameTime
end
prevFrameTime = currentFrameTime
--this is the total time in milliseconds
totalTime = totalTime + deltaFrameTime
--multiply by 0.001 to get time in seconds
txt_counter.text = totalTime * 0.001
end