找回密码
 立即注册
查看: 227|回复: 0

ToLua协同程序(coroutine)

[复制链接]
发表于 2023-4-9 20:47 | 显示全部楼层 |阅读模式
ToLua协同程序

之前文章转载过一篇Lua的协同程序,在Tolua中其实内部重写了部分lua的协同程序的方法,所以原理基本类似,只是用法改变了。
基本语法

方法描述
coroutine.start(协程函数,num1,num2,…)协程函数的开启
coroutine.step(count)协程函数的挂起
coroutine.wait(延时时间)协程函数的延时 注意:时间的单位是秒
coroutine.stop(协程对象)协程函数的结束 注意:协程函数关闭的协程对象是对应的协程开启函数的返回值
coroutine.www(网址)协程下载
WaitForSeconds(延时时间)等待延迟时间
WaitForFixedUpdate()等待fixedupdate渲染结束
WaitForEndOfFrame()等待OnGUI渲染结束
Yield(null)等待CPU执行一帧
Yield(0)等待CPU执行一帧
Yield(www)等待www结束
这里第一次用到luastate.Start()函数,因为这次需要wrap提供功能,因此必须启动它,里面比较关键是gameObject.AddComponent《LuaLooper》();添加了这个组件后,它会在c#每一帧驱动lua的协同完成所有的协同功能,这里的协同已经不单单是lua自身功能,而是tolua#模拟unity的所有的功能。
例子如下:
  1. function fib(n)
  2.     local a, b =0,1while n >0do
  3.         a, b = b, a + b
  4.         n = n -1
  5.     end
  6.     return a
  7. end
  8. function CoFunc()print('Coroutine started')for i =0,10,1doprint(fib(i))                    
  9.         coroutine.wait(0.1)                                               
  10.     end       
  11.         print("current frameCount: "..Time.frameCount)
  12.         coroutine.step()print("yield frameCount: "..Time.frameCount)
  13.         local www = UnityEngine.WWW("http://www.baidu.com")
  14.         coroutine.www(www)
  15.         local s = tolua.tolstring(www.bytes)print(s:sub(1,128))print('Coroutine ended')
  16. end
  17. function TestCortinue()       
  18.     coroutine.start(CoFunc)
  19. end
复制代码
结果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-22 14:02 , Processed in 0.190288 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表