菜鸟教程 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视频,建议是在创建协程时一次性传递所有参数,这样可以避免混乱