案例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. 印度首席大法官力推 AI 进司法,曾因歧视女性引争议
  2. 【bzoj5037】[Jsoi2014]电信网络 最大权闭合图
  3. 浅谈分布式一致性协议之3PC
  4. Javascript正则
  5. 在Hadoop集群上的Hive配置
  6. turbo c语言编程环境,turbo c(编程软件)
  7. 2021年Delphi第26届应用软件开发展示挑战赛的获胜者名单
  8. 美术集网校—多点透视如何运用于绘画中?学会透视增加绘画体积感!
  9. 【转】C#调用Windows图片和传真查看器打开图片
  10. Markdown中给图片增加超链接
  11. 微信图片去除马赛克_微信怎么把图片加上马赛克_微信如何将照片打码的方法介绍_3DM手游...
  12. a[i]-‘0‘与(int)a[i]区别
  13. centos 安装flash插件
  14. 系统Waiting TTFB 时间超长问题-之代码接口访问问题
  15. 电子设计应用超声波测距仪的设计
  16. 软件设计师:二周目下午真题
  17. 计算机发展的五个阶段那个是转折点,计算机网络的发展有哪几个转折点
  18. 【python+opencv】图像卷积及滤波
  19. 基于simulink的VSG并网逆变器仿真——VSG控制——离并网切换——虚拟同步发电机技术
  20. 杰理之杰理BLE和通用MCU芯片【篇】

热门文章

  1. 学习Java主要的就业方向有哪些呢?
  2. JavaScript中onload()用法
  3. win10 任务栏图标左击无效,右击有效的处理办法
  4. 简图记录-批判性思维
  5. 异构服务器 微服务_微服务架构是什么?
  6. 软件测试面试题:关闭浏览器中quit和close的区别
  7. 程序员必备的20多种开发工具
  8. 请求https接口时报错:Caused by SSLError(SSLError(1, u‘[SSL: CERTIFICATE_VERIFY_FAILED] certificat,安装certifi
  9. Alextnet网络
  10. C++小作业——简单通讯录设计