正确重新执行协程?

时间:2019-04-30 01:38:32

标签: lua coroutine

我正在使用lua创建游戏;我需要一个计时器来在比赛间歇以及回合中运行。游戏最初以15秒的间歇时间执行。计时器在这种情况下运行良好,但是随后对该函数的调用似乎根本不会触发它……有什么提示?

我尝试将协程创建方法替换为coroutine.wrap()而不是coroutine.create()。 在首次调用后成功运行时,协程的状态似乎仍处于屈服状态。

此处显示了简化的逻辑:其中,秒是整数,而结尾是布尔值

module.startTimer = coroutine.create(function(seconds,ending)
    wait()
print("Timer starting with: "..seconds.." seconds...round ending: "..tostring(ending))
while seconds > -1 do
    wait(1)
    seconds = seconds - 1
end
if ending == true then
    coroutine.yield(module.startTimer)
else
    coroutine.yield(module.startTimer)
end
end)

首次通话(有效):

print(coroutine.status(module.startTimer))
coroutine.resume(module.startTimer,15,false)
wait(1)
print(coroutine.status(module.startTimer))

打印:已暂停,已暂停

第二次调用(不起作用):其中RoundLength.Value是可成功打印的可验证的int值(300)。

print(coroutine.status(module.startTimer))
coroutine.resume(module.startTimer,CURRENT_ROUND:FindFirstChild("RoundLength").Value,true)
wait()
print(coroutine.status(module.startTimer))
wait(CURRENT_ROUND:FindFirstChild("RoundLength").Value)

不打印任何内容,不执行任何操作,startTimer不打印状态。

1 个答案:

答案 0 :(得分:1)

我认为您可能误解了Lua的协程(它们与普通协程不同,因为它们是不对称的),尽管我不确定。

按照书面规定,该函数将循环运行直到时间用完,然后产生自身(?),以便从coroutine.resume调用中返回其自身的函数值。

一旦恢复,它将再次从couroutine.yield调用开始,到达函数的结尾,然后返回,结束协程的执行。