案例5:

这一章讲的是lua中的协程

如果我没记错的话,lua中没有多线程,只有协程,lua的协程自带的用起来有点局限性,Tolua中协程由于重写了部分的方法,变得更加方便了

核心代码如下:

function CoFunc()print('Coroutine started')local i = 0for i = 0, 10, 1 doprint(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')endfunction TestCo()            StartCoroutine(CoExample)                                   endfunction StartDelay()coDelay = StartCoroutine(Delay)            endfunction StopDelay()StopCoroutine(coDelay)end

好处大概就是lua代码的写法上更加和C#中类似了,而且没有了之前的准备工作,代价是效率降低很多了,而且自己的C#端对应得对象需要继承类LuaClient,LuaClient中就封装了方案1中所有的那些操作,其实到最后还是返璞归真了,除此之外还加载了一些其他的库,估计这些就是写法改变的核心~~,

主要使用方法由于和C#太相似了,我就不一一列举解释了,大家自己看一下就可以了

效果图如下:

Tolua使用笔记三:Tolua协程用法相关推荐

  1. Unity 协程用法总结

    Unity 协程用法总结 协程:协同程序,在主程序运行的同时,开启另外一段逻辑处理,来协同当前程序的执行,注意协程不是线程,只是具有线程特点的"伪协程". 协程的使用需要直接或间接 ...

  2. Go学习笔记 -- 通道实现协程等待

    文章目录 前言 方法一:睡眠等待 方法二:通道 什么是通道? 通道的特性 什么是非缓冲通道 什么是缓冲通道 通道的简单使用 非缓冲通道 缓冲通道 小心死锁 使用通道实现协程等待 前言 上一次简单了解了 ...

  3. 笔记 | 初探Kotlin协程

    如何理解协程 协程是一种不同于进程和线程的存在,其本质是一种函数,同一线程中的多个协程是串行执行的,但为了理解仍然需要三者一起对比. 进程.线程.协程三者的上下文切换对比: 进程 线程 协程 切换者 ...

  4. 【Unity笔记】使用协程(Coroutine)异步加载场景

    using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; using System;public ...

  5. Golang笔记——goroutine(协程)

    goroutine-看一个需求 需求:要求统计 1-9000000000 的数字中,哪些是素数? 分析思路: 传统的方法,就是使用一个循环,循环的判断各个数是不是素数.[很慢] 使用并发或者并行的方式 ...

  6. 【笔记】lua - 协程

    文章目录 双循环切换 迭代器 协程 其执行过程类似于不带返回值的函数调用. 一个程序可以包含多个协程,可以对比与一个进程包含多个线程: 线程相互独立,有自己的上下文,切换受系统控制: 协程也相对独立, ...

  7. 简单总结协程Coroutine及Yield常见用法

    原文地址:http://blog.csdn.net/qq_18995513/article/details/51944602 最近学习协程Coroutine,参考了别人的文章和视频教程,感觉协程用法还 ...

  8. python线程池模块_python并发编程之进程池,线程池,协程

    需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...

  9. 线程queue、事件event及协程

    线程queue.事件event及协程 线程queue 多线程抢占资源,让其保持串行的两种方式: ​ 1.互斥锁 ​ 2.队列 线程队列分为以下三种: 1.Queue(先进先出) import queu ...

最新文章

  1. html5自动完成是什么,HTML5中form如何关闭自动完成功能的方法
  2. linux解压war包
  3. 基于jquery的bootstrap在线文本编辑器插件Summernote (转)
  4. 【数据竞赛】CV赛题总结:人民币面值与编码识别
  5. swift3.0截取View生成图片 图片截取成新图片
  6. matlab读取指定路径excel文件,MATLAB读取Excel文件
  7. 全国80几所重点大学ftp资源库(经常逛逛可能有惊喜哦)很难收集的,知道其他的友友可以留言完善...
  8. [php] 高级教程
  9. C++——多进程并发与多线程并发
  10. flask-sqlalchemy 数据基本操作
  11. 6个免费科技外文文献下载网址,拿走不谢
  12. ecshop首页调用团购信息产品购买人数
  13. Postgresql 学习记录,模式,分区表,触发器,事务,窗口函数,视图,建表,约束等
  14. Mapbox使用之glyphs(字体符号)
  15. 管理信息系统需求调研分析指南-软件工程-www.knowsky.com
  16. 数据库应用系统的四个层次划分
  17. sRGB转CIEXYZ转CIELAB,以及色彩距离
  18. 关闭2345,搜狐等软件的弹窗
  19. 字节跳动 校招薪资曝光,老员工被倒挂疯了~
  20. 服务器修改上传图片大小限制,修改IIS7默认上传大小限制

热门文章

  1. 什么是 CSRF 攻击?如何防范 CSRF 攻击?
  2. 最浅显易懂kerberos认证和黄金白银票据
  3. java 对Outlook保存的.Msg格式文件解析
  4. mac彩色球转不停,Mac电脑一直在转圈怎么办?
  5. 在线帮助中心,轻松解决售后服务问题
  6. 如何改变坏习惯,形成新习惯
  7. docker安装konga系统
  8. 网页抓包工具httpwatch
  9. whois命令_WHOIS使用Whois搜索
  10. 封装、权限修饰符、javaBean规范、继承中封装、多态、关于上溯造型的解释。