ipairs循环总是只返回lua中的一个值?

时间:2017-06-14 14:12:40

标签: lua roblox

快速编辑:_G.i是我设置为创建24小时时间范围的1到24个表格。它全局存储在三级脚本中,并按如下方式实现:

_G.i = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24}

所以我试图让这个循环与我创建的日/夜循环一起工作。我希望循环不断检查它是什么时间,并根据我设置的一些参数将该时间打印到控制台。

light = script.Parent.lightPart.lightCone
timeofday = ""
wait(1)

function checkTime()
    for i, v in ipairs(_G.i) do
        wait(1)
        print(v)
        print(timeofday)
        if v > 20 and v < 6 then
            timeofday = "night"
        else
            timeofday = "day"
        end 
    end
end  

while true do
    checkTime()
    wait(1)
end

出于某种原因,这只是在控制台中打印一天,即使我正确地循环。时间与昼夜脚本中的时间相同。我也会在这里发布。

function changeTime()
    for i, v in ipairs(_G.i) do
        game.Lighting:SetMinutesAfterMidnight(v * 60)
        wait(1)
    end
end

while true do
    changeTime()
end

很抱歉,如果这篇文章很草率或者代码很草率,我对这两篇文章都很陌生。我一直试图自己解决这个问题,并且一直做得很好我最初不知道ipairs循环是什么但是我设法让它在夜间循环而不是无限等待(1)循环。

1 个答案:

答案 0 :(得分:4)

您的问题就在于:

if v > 20 and v < 6 then

v永远不会两者大于20且小于6.您需要or逻辑运算符。

除此之外,我不确定你为什么要使用全球i来保存1到24的数字列表?您可以使用ranging for loop获得相同的效果。此外,如果您要检查较低代码设置的当前时间,则应将时间值存储在全局变量中。像这样:

light = script.Parent.lightPart.lightCone
current_time = 0

function checkTime()
    print(current_time)
    if current_time > 20 or current_time < 6 then
        timeofday = "night"
    else
        timeofday = "day"
    end 
    print(timeofday)
end  

while true do
    checkTime()
    wait(0.1)
end


function changeTime()
    for v = 1, 24 do
        game.Lighting:SetMinutesAfterMidnight(v * 60)
        current_time = v
    end
end

while true do
    changeTime()
    wait(1)
end

您执行此操作的方式的问题是您假设checkTime()函数将始终在changeTime()函数之后运行,这不一定是这种情况。