如何在x秒内突破循环

时间:2019-04-13 16:02:40

标签: lua

我正在尝试修改FiveM脚本,并且试图在4秒后打破Lua中的循环,但是我不知道如何。

我不知道自己在做什么,需要帮助。

Citizen.CreateThread(function()
    function drawscaleform(scaleform)
        scaleform = RequestScaleformMovie(scaleform)

        while not HasScaleformMovieLoaded(scaleform) do
            Citizen.Wait(0)
        end

        PushScaleformMovieFunction(scaleform, "SHOW_POPUP_WARNING")
        PushScaleformMovieFunctionParameterFloat(500.0)
        PushScaleformMovieFunctionParameterString("ALERT")
        PushScaleformMovieFunctionParameterString("~b~Peacetime Active")
        PushScaleformMovieFunctionParameterString("This Means No Priority Calls")
        PushScaleformMovieFunctionParameterBool(true)
        PushScaleformMovieFunctionParameterInt(0)
        PopScaleformMovieFunctionVoid()

        DrawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255, 0)
    end

    while true do
        Citizen.Wait(0)
        drawscaleform("POPUP_WARNING")
    end
end)

我想在4秒后突破while true

2 个答案:

答案 0 :(得分:1)

很可能是Lua的break命令的某种组合,在您的while循环中设置一个条件,可以更清楚地传达循环的意图(而不只是true ...),并且最好使用FiveM的{{ 1}}函数。该函数here的文档说,该参数是暂停当前执行线程的毫秒数。

花一些时间来理解这些元素,您要修改的代码并进行实验。因此,不仅仅是为您编码。

答案 1 :(得分:1)

有一个FiveM函数Citizen.SetTimeout,在经过一段时间后可以调用该函数。这是一种(未试用的)使用方式:

Citizen.CreateThread(function()
    function drawscaleform(scaleform)
    ...
    end

    local wait = true

    Citizen.SetTimeout(4000, function() wait = false end)

    while wait do
        Citizen.Wait(0)
        drawscaleform("POPUP_WARNING")
    end
end)