lua协程

2019-09-23  本文已影响0人  周末的游戏之旅

Lua中协同程序:意义和Unity中一样
Lua中协同程序的函数被放在coroutine的表中
协同程序状态:挂起、执行、死亡、正常
协程创建后默认为挂起状态

cor = coroutine.create( function() 
    print("111") 
end
)

print(coroutine.status( cor )) --查看协程状态
coroutine.resume(cor) --开始协程
print(coroutine.status( cor )) --查看协程状态

yield 挂起 需要手动启动

local cor = coroutine.create( function()
    for i=1,2 do
        print(i)
        coroutine.yield() --挂起
    end 
end)
coroutine.resume( cor )
print(coroutine.status( cor ))
coroutine.resume( cor )
print(coroutine.status( cor ))

resume 有两个返回值 第一个是协程是否正常执行,第二个是错误信息

local cor = coroutine.create( function()
    error("aaabbb")
end)
local r1,err1 = coroutine.resume( cor )
print(r1)
print(err1)

当程序正常执行时,第二个返回值也可以是yield的值

local cor = coroutine.create( function(a)
    print(a)
    coroutine.yield( 'Young' )
end)
local rr,ee = coroutine.resume( cor,10,20 )
print(rr)
print(ee)

协程传参

local cor = coroutine.create( function(a,b)
    print(a+b)
end)
coroutine.resume( cor,10,20 )

yield 函数也有返回值 ,返回值时resume的第二个参数

local cor = coroutine.create( function(a)
    print(a)
    local c = coroutine.yield( 'Young' )
    print(c)
end)
coroutine.resume( cor,10)
coroutine.resume( cor,"lalala")

yield函数的返回值为resume的第二个参数
resume的返回值为yield的参数

上一篇 下一篇

猜你喜欢

热点阅读