Lua Coroutine 的简单使用
发布时间:2020-12-14 21:56:32 所属栏目:大数据 来源:网络整理
导读:在Unity 中习惯了使用 Coroutine,发现 Lua中也有 Coroutine 可以使用,大喜。 Lua 中的 Coroutine 有四种状态 Suspend 、 Running? 、Dead、 Normal 。 下面代码解释了各个状态的时机 --------------------------get coroutine status---------------------
|
在Unity 中习惯了使用 Coroutine,发现 Lua中也有 Coroutine 可以使用,大喜。 Lua 中的 Coroutine 有四种状态 Suspend 、 Running? 、Dead、 Normal 。 下面代码解释了各个状态的时机 ------------------------
--get coroutine status--
------------------------
local co=coroutine.create(function( )
-- body
print("hi")
end)
--coroutine type is thread
print(co,type(co))
--coroutine is on suspend status after create (suspend/running/dead/normal)
print(coroutine.status(co))
--coroutine is on running status after resume
local bret=coroutine.resume(co)
--注意resume操作是有返回值的!!! 这里返回true
print(bret)
--coroutine is on dead status running end
print(coroutine.status(co))
--对一个 已经是dead状态的coroutine进行resume是返回false的
local bret=coroutine.resume(co)
print(bret)
--而且直接在print中进行resume还能打印出来详细错误
print(coroutine.resume(co))
------------------
----test yield----
------------------
print("----test yield----")
co=coroutine.create(function ( )
-- body
for i=1,5 do
print("co",i)
--coroutine be suspend while call yield()
coroutine.yield()
print("co after yield",i)
end
end)
print(coroutine.status(co))
coroutine.resume(co) --执行resume,coroutine继续执行状态running,输出1,然后yield 状态变为suspended
print(coroutine.status(co))
coroutine.resume(co)--执行resume,coroutine继续执行状态running,输出2,然后yield 状态变为suspended
print(coroutine.status(co))
coroutine.resume(co)--执行resume,coroutine继续执行状态running,输出3,然后yield 状态变为suspended
print(coroutine.status(co))
coroutine.resume(co)--执行resume,coroutine继续执行状态running,输出4,然后yield 状态变为suspended
print(coroutine.status(co))
coroutine.resume(co)--执行resume,coroutine继续执行状态running,输出5,然后yield 状态变为suspended
print(coroutine.status(co))
coroutine.resume(co) --for循环了5次,5次循环之后状态是suspended,
--这时候是suspended在yield(),所以要再一次resume,执行yield()后面的逻辑
print(coroutine.status(co))
print(coroutine.resume(co))
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
