我们在使用Lua开发网络游戏时、尤其进入剧情副本时、我们希望能够这样编写代码! 当副本进行中 刷怪 <刷第几轮的怪物> 实时监测第一波怪物是否被杀光 结束 function StartCopyScene() local iSceneStep = 1 while true do ShuaGuai(iSceneStep) while true do if CheckAllMonsterDie() then iSceneStep = iSceneStep+1 else Sleep(1) break end end end end 翻译成代码就是这样、然而并没什么卵用! 如此阻塞、循环、主线程咋办、其他逻辑咋办? 这时候我们就要考虑到强大的协程了、它能模拟各种线程阻塞等各种操作、 -- Simple Coroutines System g_SCSMoc = {} g_SCSMoc.co_list_ = {} function g_SCSMoc.CreateThread(f, param) table.insert(g_SCSMoc.co_list_,{coroutine.create(f), param}) end function g_SCSMoc.Sleep(time) if time~=nil then local co = g_SCSMoc.running co.wake_time = g_SCSMoc.now + time end coroutine.yield() end function g_SCSMoc.Run() 遍历列表、按需要执行 end 这样,我们便能实现全部功能啦,是否很强大! |
Lua开发者运行: 4409天
热烈欢迎各位留言,本人会虚心听取各位意见!