我的定时器脚本中的数学有误... Lua Minecraft

我不知道出了什么问题,但当它保存数值时,它会将此写入文件。如果您需要更多信息或有疑问,请问我!感谢您的时间,并希望您的解决方案!SebyGHG我的discord:S̸̽̚e̵̓̓b̸̿̕y̴͆͐#4638 os.time()给你一个数字值。感谢您的注意!

文件中的时间示例:1638185640

游戏中显示的时间示例: 游戏中

name = "计时器"
description = "只是一个普通的计时器。"
positionX = 0
positionY = 0
sizeX = 24
sizeY = 10
scale = 1

START_STOP_KEY = 0x55 --或'U'
RESET_KEY = 0x4A --或'J'
 --
--[[
    由SebyGHG编写的计时器模块脚本,原始脚本来自Onix64(秒表)

    如果您希望更改键,则可以从此处获取键代码
    https://docs.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes
]] -------------脚本代码-------------

state = 1
stopTime = 0
startTime = 0

f = io.input("timesave.txt")
result  = f :read()
f :close()
stopTime = result
state = 2

function keyboard(key, isDown)
    if (isDown == true) then
        if (key == RESET_KEY) then
            state = 0
        elseif (key == START_STOP_KEY) then
            if (state == 0) then
                state = 1
                startTime = os.time()
            elseif (state == 1) then
                state = 2
        io.output("timesave.txt")
        timesave= (io.open("timesave.txt","w"))
                io.write(stopTime)
                io.close(timesave)
                stopTime = os.time() -stopTime
            elseif (state == 2) then
        state = 1
        startTime =startTime  + os.time() - stopTime
            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 - 3600
    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 = 255, g = 0, b = 0, a = 255}
        timerText = "00:00"
    elseif (state == 1) then
        timerText = timeText(os.time() - startTime)
        TextColor = {r = 0, g = 255, b = 255, a = 255}
    elseif (state == 2) then
        timerText = timeText(stopTime - startTime)
        TextColor = {r = 255, g = 255, b = 0, a = 255}
    end
end

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

    gfx.color(0, 0, 0, 0)
    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/70157053

点赞
stackoverflow用户12456742
stackoverflow用户12456742

看起来你正在将Unix时间戳保存到文件中,你可以尝试使用在线时间转换器将其转换为易读格式(https://time.is/Unix_time_converter

除此之外,花些时间阅读这个Lua页面上的os.time()实现细节:https://www.lua.org/pil/22.1.html

当调用没有参数的time函数时,返回当前日期和时间,表示为数字。(在大多数系统中,该数字是自某个时期以来的秒数)。

如果你想要在某些操作之间计算时间差,可以保存开始时间戳并在操作结束时进行差分。lua原生支持这种操作使用os.difftime()。(http://www.lua.org/manual/5.3/manual.html#pdf-os.difftime

2021-12-01 14:11:16