大富翁开发日记:一、使用巨型lua协程
2014-06-13 12:32
302 查看
一个大胆的尝试:使用巨型lua协程来表示整个“一局”流程。
lua协程是一个很另类的功能,有并发的影子但又不是真的并发,所以真正拿它来做大功能框架的范例不多,通常用于一些小型trick式设计。但这次我在大富翁里把它用到了“极致”:整个一局游戏,就是全部跑在一个协程里的!
简单的说:在开始按钮的点击响应函数里(自然是在“主协程”中),创建出用于新一局游戏的“run协程”,然后在这里面启动这一局的while大循环,共3层:第1层为每个回合,第2层为每个玩家,第3层为每个指令。每当要等待一个指令时,run协程挂起,控制返回主协程,也就使主线程处于应用程序自身的“while(1){ getMessage }"状态!在得到相应的ui消息或是网络消息时(分别对应于己方操作或对方操作),将其“喂”给run协程使之往前跑一段,直至遇到下一个指令等待而挂起。如此周而复始,直到一局结束。
通常,类似的系统都会用状态机来实现:依游戏逻辑设定数十个状态,再设定每种状态下每一种输入的响应函数。虽然同样可以达到“等待—前进”的效果,但相比于协程方案,弱点有:一、流程的推进在形式上不再有一个完整直观的线索,而是散布在数十处各异的函数里,对流程的说明只能通过额外的文档补充;二、每一次挂起都对应当次响应函数返回,而下一次的响应函数如要与之共享信息,只能通过状态机级别的全局变量,这会导致大量繁琐的管理消耗。在协程方案里,整个流程处于一个函数内的三层while循环表示下,非常集中直观,看起来简直就是一个特事特办、不怕阻塞的专用线程;而所谓等待并不真的阻塞只是将自身挂起,一旦恢复,仅仅是完成了一个函数调用,之前的状态——局部变量全部都在,毫无额外负载!
lua协程是一个很另类的功能,有并发的影子但又不是真的并发,所以真正拿它来做大功能框架的范例不多,通常用于一些小型trick式设计。但这次我在大富翁里把它用到了“极致”:整个一局游戏,就是全部跑在一个协程里的!
简单的说:在开始按钮的点击响应函数里(自然是在“主协程”中),创建出用于新一局游戏的“run协程”,然后在这里面启动这一局的while大循环,共3层:第1层为每个回合,第2层为每个玩家,第3层为每个指令。每当要等待一个指令时,run协程挂起,控制返回主协程,也就使主线程处于应用程序自身的“while(1){ getMessage }"状态!在得到相应的ui消息或是网络消息时(分别对应于己方操作或对方操作),将其“喂”给run协程使之往前跑一段,直至遇到下一个指令等待而挂起。如此周而复始,直到一局结束。
通常,类似的系统都会用状态机来实现:依游戏逻辑设定数十个状态,再设定每种状态下每一种输入的响应函数。虽然同样可以达到“等待—前进”的效果,但相比于协程方案,弱点有:一、流程的推进在形式上不再有一个完整直观的线索,而是散布在数十处各异的函数里,对流程的说明只能通过额外的文档补充;二、每一次挂起都对应当次响应函数返回,而下一次的响应函数如要与之共享信息,只能通过状态机级别的全局变量,这会导致大量繁琐的管理消耗。在协程方案里,整个流程处于一个函数内的三层while循环表示下,非常集中直观,看起来简直就是一个特事特办、不怕阻塞的专用线程;而所谓等待并不真的阻塞只是将自身挂起,一旦恢复,仅仅是完成了一个函数调用,之前的状态——局部变量全部都在,毫无额外负载!
相关文章推荐
- 使用EditPlus作为Lua开发工具的方法
- 君正4750开发板使用日记6-uCOS(minios)的开发配置试验
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 【COCOS2DX-LUA 脚本开发之十】使用Lua CJSON库进行encode与decode操作完成对Json数据转化
- 【COCOS2DX-LUA 脚本开发之八】使用Lua实现Http交互
- 使用LUA开发WOW插件 ACE3库的理解(一)
- 【cocos2dx开发技巧7】脚本lua的使用--集成cocosbuilder
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- lua开发之禁止使用未定义成员
- 【cocos2dx开发技巧5】脚本lua的使用--代码集锦
- 开发日记:Google 图表 API 使用
- 使用EditPlus搭建Lua开发环境
- 使用EditPlus搭建Lua开发环境
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pk创建自定义类 推荐
- android数据存储:使用SQLite 开发简易心情日记
- 网络游戏服务器开发:脚本系统的制作,linux下使用tolua制作Lua脚本系统(不需要PKG文件)
- 【iOS-cocos2d-X 游戏开发之八】使用Lua脚本进行游戏开发(基础篇) 推荐
- 【Cocos2dX(2.x)_Lua开发之三】★重要必看篇★在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP免Binding创建自定义lua类
- 【cocos2dx开发技巧6】脚本lua的使用--开发环境的配置