Tolua使用笔记三:Tolua协程用法
来源:互联网 发布:php var_export 编辑:程序博客网 时间:2024/05/29 13:23
原文地址:http://blog.csdn.net/qq_30168505/article/details/52752868
案例5:
这一章讲的是lua中的协程
如果我没记错的话,lua中没有多线程,只有协程,lua的协程自带的用起来有点局限性,Tolua中协程由于重写了部分的方法,变得更加方便了
核心代码如下:
function CoFunc() print('Coroutine started') local i = 0 for i = 0, 10, 1 do print(fib(i)) coroutine.wait(0.1) end print("current frameCount: "..Time.frameCount) coroutine.step() print("yield frameCount: "..Time.frameCount) local www = UnityEngine.WWW("http://www.baidu.com") coroutine.www(www) local s = tolua.tolstring(www.bytes) print(s:sub(1, 128)) print('Coroutine ended')endfunction TestCortinue() coroutine.start(CoFunc)end效果图如下:
对于lua中的协程:
主要的知识点如下:
1:注册C#中类型方法到lua中 :先在ToLua中的CustomSetting.cs 文件中添加需要注册的类型,然后按照C#中的那种方法直接用a.b就可以调用C#类型中的静态方法了,如果调用的是非静态方法,则是用a:b , 具体为什么这么区别是因为lua中没有类的概念,只能用这种方法获取到具体对象
2:lua协程的准备工作
在 创建完lua虚拟机之后,一定要记得做以下几步:
lua.Start();LuaBinder.Bind(lua); looper = gameObject.AddComponent<LuaLooper>();looper.luaState = lua;首先调用虚拟机的 lua.Start 函数初始化,然后调用LuaBinder的静态方法 LuaBinder.Bind(lua); 参数就是你创建的虚拟机 , 然后为你的一个游戏对象添加组件 LuaLooper ,并将该 LuaLooper 的内部虚拟机引用指定为我们创建的虚拟机 , 然后我们就可以正常的使用Lua中的协程了,它会在c#每一帧驱动lua的协同完成所有的协同功能,这里的协同已经不单单是lua自身功能,而是tolua#模拟unity的所有的功能。。
3:;lua中协程的使用:
协程函数的开启 : coroutine.start(协程函数)
协程函数的挂起: coroutine.step()
协程函数的延时: coroutine.wait(延时时间) 注意:时间的单位是秒
协程函数的结束: coroutine.stop(协程对象) 注意:协程函数关闭的协程对象是对应的协程开启函数的返回值
协程下载: coroutine.www(网址)
其中,除了 coroutine.start(协程函数) 和 coroutine.stop(协程对象) 之外,其他的协程方法只允许在协程函数的内部使用
案例6:
这个是Tolua的第2套携程使用方法,作者说明不要2套协程方案交叉使用,且这一套协程方法使用效率低,第一套为Tolua的推荐协程使用方案
具体的核心代码如下:
function CoExample() WaitForSeconds(2) print('WaitForSeconds end time: '.. UnityEngine.Time.time) WaitForFixedUpdate() print('WaitForFixedUpdate end frameCount: '..UnityEngine.Time.frameCount) WaitForEndOfFrame() print('WaitForEndOfFrame end frameCount: '..UnityEngine.Time.frameCount) Yield(null) print('yield null end frameCount: '..UnityEngine.Time.frameCount) Yield(0) print('yield(0) end frameCime: '..UnityEngine.Time.frameCount) local www = UnityEngine.WWW('http://www.baidu.com') Yield(www) print('yield(www) end time: '.. UnityEngine.Time.time) local s = tolua.tolstring(www.bytes) print(s:sub(1, 128)) print('coroutine over') end function TestCo() StartCoroutine(CoExample) end function StartDelay() coDelay = StartCoroutine(Delay) end function StopDelay() StopCoroutine(coDelay) end
好处大概就是lua代码的写法上更加和C#中类似了,而且没有了之前的准备工作,代价是效率降低很多了,而且自己的C#端对应得对象需要继承类LuaClient,而LuaClient中就封装了方案1中所有的那些操作,其实到最后还是返璞归真了,除此之外还加载了一些其他的库,估计这些就是写法改变的核心~~,
主要使用方法由于和C#太相似了,我就不一一列举解释了,大家自己看一下就可以了
效果图如下:
- Tolua使用笔记三:Tolua协程用法
- Tolua使用笔记三:Tolua协程用法
- ToLua 笔记
- ToLua学习笔记,使用Update方法(三)
- tolua++
- tolua
- tolua
- tolua++使用
- toLua++使用
- tolua++使用
- tolua++使用
- ToLua学习笔记(三) Example 03 CallLuaFunction
- ToLua学习笔记,通信(三)
- tolua 学习笔记 插件的使用
- ToLua学习笔记,使用枚举Enum
- tolua++初探(三)
- tolua总结(三)
- 项目记录28--unity-tolua框架 lua使用协程
- .net 页面加载视频
- php学习(三)
- linux系统启动项说明
- ERROR: In <declare-styleable> MenuView, unable to find attribute android:preserveIconSpacing
- C进阶之递归应用
- Tolua使用笔记三:Tolua协程用法
- 微博环境下利用综合策略构建推荐引擎
- 络性能测试工具iperf详细使用图文教程【转载】
- linux work queue
- java实现Django的PBKDF2PasswordHasher加密算法
- (108)调用事件调度器
- javaScript中with函数用法实例分析
- 怎么恢复回收站清空的文件
- IDE文件识别错误导致开发人员没有找出错误