CoronaSDK - 实现游戏计时器计数毫秒

问题描述 投票:0回答:1

我正在使用timer.performWithDelay来计算玩家完成关卡需要多长时间。我希望它可以测量到100秒(因为游戏是多人游戏,我不希望有太多关系)。

这是我做的:

local totaltime = 0

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

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

它导致每个“秒”持续约4秒。这是不实际还是某个地方有缺陷?

lua corona
1个回答
3
投票

timer.preformWithDelay的时间延迟小于帧之间的时间时,计时器将等待直到输入下一帧以调用该函数。

这意味着如果你的游戏运行速度为30或60 fps,那么你的“帧ms”大约为16或33毫秒。因此,您可以放置​​的最小延迟是帧之间的延迟。

在您的情况下,您希望每1/100秒设置一次计时器,或者设置为10ms。这意味着,因为你的帧最有可能是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
© www.soinside.com 2019 - 2024. All rights reserved.