在lua中制作计时器脚本,但是如果我停止计时,在恢复后时间会冻结并向前跳跃(我的世界)

当我停止计时器并重新启动它时,它会根据暂停时经过的时间向前跳跃。 问题的视频链接: https://drive.google.com/file/d/1Xohbzbx4oyVfbRnSMLc_7u1gf7AWMJVy/view?usp=sharing 代码:

name = "Stopwatch"
description = "用于任何原因的计时..."

positionX = 0
positionY = 0
sizeX = 24
sizeY = 10
scale = 1

START_STOP_KEY = 0x55 --或 'U'
RESET_KEY = 0x4A --或 'I'
--[[
    秒表模块脚本


    如果您想更改键,则可以从这里获取键代码
    https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
]]--

-------------脚本代码-------------
previoustime = 0
state = 0
startTime = 0
stopTime  = 0

function keyboard(key, isDown)
    if (isDown == true) then
        if (key == RESET_KEY) then
            state = 0
        end
    end
end

function keyboard(key, isDown)
    if (isDown == true) then
        if (key == START_STOP_KEY) then
            if (state == 0) then
                state = 1
                startTime = os.time()
            elseif (state == 1) then
                state = 2
                previoustime = os.time()
                stopTime = os.time()
            elseif (state == 2) then
                state = 1
                time = previoustime
            end
        end
    end
end

TimerText = "00:00"
TextColor = {r=30,g=255,b=30,a=255}
function doubleDigit(number)
    if (number < 10) then
        return "0" .. math.floor(number)
    else
        return math.floor(number)
    end
end

function timeText(time)
    local result = ""
    local days = 0
    while (time > 86399) do
        days = days + 1
        time = time - 86400
    end

    local hours = 0
    while (time > 3599) do
        hours = hours + 1
        time = time - 86400
    end

    local minutes = 0
    while (time > 59) do
        minutes = minutes + 1
        time = time - 60
    end

    if (days == 0) then
        if (hours == 0) then
            return doubleDigit(minutes) .. ":" .. doubleDigit(time)
        else
            return math.floor(hours) .. " : " .. doubleDigit(minutes) .. ":" ..doubleDigit(time)
        end
    else
        return math.floor(days) .. " : " .. doubleDigit(hours) .. " : " .. doubleDigit(minutes) .. ":" .. doubleDigit(time)
    end
end

function update()
    if (state == 0) then
        TextColor = {r=30,g=255,b=30,a=255}
        TimerText = "00:00"
    elseif (state == 1) then
        TimerText = timeText(os.time() - startTime)
        TextColor = {r=30,g=255,b=30,a=255}
    elseif (state == 2) then
        TimerText = timeText(stopTime - startTime)
        TextColor = {r=30,g=30,b=255,a=255}
    end
end

function render()
    local font = gui.font()
    local tw = font.width(TimerText)

    gfx.color(0,0,0,120)
    gfx.rect(0, 0, tw + 4, 10)

    gfx.color(TextColor.r, TextColor.g, TextColor.b, TextColor.a)
    gfx.text(2, 1, TimerText)
end

感谢您的帮助!

原文链接 https://stackoverflow.com/questions/70075918

点赞