orxx

菜鸟教程 https://www.runoob.com/lua/lua-coroutine.html

协程类似线程,但是在本人实际的游戏开发中并未使用,感觉使用协程会增加程序的复杂度

使用案例

wrap和create

------------- 协同程序
--[[
-- 两种方式
co = coroutine.wrap(
    function(a, b)
        print(a+b)
    end
)
co(20, 20)


co = coroutine.create(
    function(a, b)
        print(a+b)
        coroutine.yield()
        print(a-b)
    end
)

coroutine.resume(co, 20, 30)

print("I\'m here!")

coroutine.resume(co) -- 第一次执行需要传递参数,第一次未完成继续执行不需要重复传递参数(传递后不会生效)
--]]

-- 添加返回值
co = coroutine.create(
    function(a, b)
        print(a+b)
        coroutine.yield(a*b, a+b) -- 过程中返回值,yield括号内的内容
        return a-b,a+b  -- 结束时候返回值
    end
)

res1,res2,res3 = coroutine.resume(co, 10, 40) -- 第一个返回值永远是true或者false,代表协程是否执行成功
print(res1,res2,res3)
print("here")

res1,res2 = coroutine.resume(co)
print(res1,res2,res3)

--print(coroutine.running()) -- 协程运行时获取正在运行的协程

-- 协程的两种暂停方式
-- 一种是直接在方法里调用yield暂停
-- 另一只是在另一个方法里调用yeild,并将yield作为返回值暂停

 

协程的参数传递有点复杂,详见菜鸟教程和siki视频,建议是在创建协程时一次性传递所有参数,这样可以避免混乱

分类:

技术点:

相关文章: