Cocos2d-Lua之协同程序
2016-06-18 08:04
330 查看
协同程序与操作系统中的线程类似,但工作方式是不同的,例如线程的时间片调度算法,当某个线程的时间片用完,系统会自动让该线程等待,让后面的线程运行。而对于协同程序,除非一个正在运行的协同程序被挂起,否则就一直运行到结束才能让其他协同程序运行。
举个例子:
输出结果:
可以看到运行协程时,只有第一次传入的参数起到了作用,后面传入的参数都不被理睬,这就像发射子弹一样,一旦枪口位置和方向决定了,一旦开枪,子弹的运行轨迹就决定了,不会再改变是一个到底,协程就会用来制作这样类似的游戏。
一旦协程被挂起,执行一次就不再执行了,需要不断地resume来继续协程的执行。可以看到,没执行完一次,协程的状态就是suspended(挂起状态),知道全部运行完毕,最后的状态就会变成dead(死亡状态)。
如果这里把协同中的挂起去掉:
像这样,输出结果:
可以看到协程就会一直运行到结束。
举个例子:
function coroutineFun() local co = coroutine.create(function(a, b) for i = 1, 10 do print(a + b) coroutine.yield() end end) return co end local co = coroutineFun() for i = 1, 11 do coroutine.resume(co, i, 6) print(coroutine.status(co)) end
coroutine.create(函数) --创建一个协同程序
coroutine.yield() --将该协同程序挂起
coroutine.resume(co, i, 6) --运行协同程序,第一个参数是协同程序名称,后面的是协同程序里函数需要传入的参数
coroutine.status(协同程序名称) --获取协同程序的状态,并返回状态信息
输出结果:
可以看到运行协程时,只有第一次传入的参数起到了作用,后面传入的参数都不被理睬,这就像发射子弹一样,一旦枪口位置和方向决定了,一旦开枪,子弹的运行轨迹就决定了,不会再改变是一个到底,协程就会用来制作这样类似的游戏。
一旦协程被挂起,执行一次就不再执行了,需要不断地resume来继续协程的执行。可以看到,没执行完一次,协程的状态就是suspended(挂起状态),知道全部运行完毕,最后的状态就会变成dead(死亡状态)。
如果这里把协同中的挂起去掉:
function coroutineFun() local co = coroutine.create(function(a, b) for i = 1, 10 do print(a + b) --coroutine.yield() end end) return co end local co = coroutineFun() for i = 1, 11 do coroutine.resume(co, i, 6) print(coroutine.status(co)) end
像这样,输出结果:
可以看到协程就会一直运行到结束。
相关文章推荐
- TexturePacker 4.X 在Cocos2d-x 3.x 中帧动画实现(官方文档)
- 小水滴所理解的Cocos2dx内存管理机制
- Cocos2d-Lua之异常处理
- Cocos2d-Lua之文件操作
- Cocos2d-Lua之math库
- Cocos2d-Lua之随机数
- cocos2dx 渲染任意形状贴图
- 【Cocos2d-x游戏开发】解决Cocos2d-x中文乱码的三种方法
- windows cocos2d-x OpenGL error 0x0506 quick-cocos2d-x\lib\cocos2d-x\cocos2dx\sprite_nodes\ccsprite.c
- Cocos2d-Lua之string
- cocos2dx 3.8加载cocos studio csb文件
- cocos2D开发游戏
- Cocos2d-Lua之table的排序
- Cocos2d-Lua之Lua文件的加载与运行
- cocos2d-x面试题合集
- CocosPosd安装,错误
- Cocos2d-Lua之table的删除与插入
- cocos2dx 一张图片的闪烁的动画
- Cocos2d-Lua之table的遍历
- Cocos2d-Lua之table