我正在使用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不打印状态。
答案 0 :(得分:1)
我认为您可能误解了Lua的协程(它们与普通协程不同,因为它们是不对称的),尽管我不确定。
按照书面规定,该函数将循环运行直到时间用完,然后产生自身(?),以便从coroutine.resume
调用中返回其自身的函数值。
一旦恢复,它将再次从couroutine.yield
调用开始,到达函数的结尾,然后返回,结束协程的执行。