使用 Corona SDK 实现游戏计时器倒计时毫秒数。

我正在使用timer.performWithDelay来计时玩家完成一关的时间。我希望它能测量到0.01秒(因为这个游戏是多人游戏,我不希望有太多平局)。

这是我所做的:

local totaltime = 0

local function counter()
    totaltime = totaltime + 0.01
    print(totaltime)
end

timer1 = timer.performWithDelay( 10, counter, 0)

结果每个“秒”持续约4秒。这只是不切实际还是有缺陷的呢?

点赞
用户2260604
用户2260604

timer.performWithDelay 的延迟时间小于帧之间的时间时,计时器将等待到下一帧才调用该函数。

这意味着如果您的游戏运行在30或60帧每秒,您将拥有大约16或33毫秒的“帧毫秒”。因此,您可以设置的最小延迟是帧之间的延迟时间。

在您的情况下,您想每秒设置计时器1/100秒或者10毫秒。这意味着,由于您的帧很可能是16毫秒(60fps),因此您每记录10毫秒实际上要等待额外的6毫秒。

现在,如果您以100 FPS运行并因此实现了所说的10毫秒,那么您可以解决这个问题,但是这是不推荐的。

AlanPlantPot在[coronaLabs](http://forums.coronalabs.com/topic/41992-using-timer -to-show-secondsmilliseconds/)提供了以下解决方案的答案:

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 prevFrameTime then
        --计算自上一帧以来多长时间以毫秒为单位
        deltaFrameTime = currentFrameTime - prevFrameTime
     end
    prevFrameTime = currentFrameTime
    --这是总时间(毫秒)
    totalTime = totalTime + deltaFrameTime

    --乘以0.001秒,以获取以秒为单位的时间
    txt_counter.text = totalTime * 0.001
end
2014-06-29 16:57:37