1. xlua之将c#集合转换成table

-- 将c#的list转换成table
local function ConvertCSListToTable(list)
local t = {};
for i = , list.Count - do
table.insert(t, list[i]);
end
return t;
end -- 将c#的数组转换成table
local function ConvertCSArrayToTable(array)
local t = {};
for i = , array.Length - do
table.insert(t, array[i]);
end
return t;
end -- 将c#的字典转换成table
local function ConvertCSDicToTable(dic)
local t = {};
local etor = dic:GetEnumerator(); while (etor:MoveNext())
do
local current = etor.Current;
local k = current.Key;
local v = current.Value;
table.insert(t, {k, v});
end return t;
end

2. 分割字符串

-- 分割字符串
function this.Split(input, delimiter)
input = tostring(input);
delimiter = tostring(delimiter); if (delimiter == "") then
return false;
end local pos,arr = , {};
for st,sp in function() return string.find(input, delimiter, pos, true) end do
table.insert(arr, string.sub(input, pos, st - ));
pos = sp + ;
end
table.insert(arr, string.sub(input, pos));
return arr;
end

3. 判断 unity3d 中 GameObject 是否为 null

详见:https://blog.csdn.net/qq_34907362/article/details/80482493

function IsNil(uobj)
return uobj == nil or uobj:Equals(nil)
end

4. xlua之与c#枚举器的关系

小鱼人(692540236) 13:20:32
xlua中我如果想跟c#中一样去启动新协程,等新协程结束再执行后面的逻辑,怎么弄啊?
Home_to_the_mold(383894728) 13:45:33
-- HotFix.UIRankMainTest.lua
-- 模拟Lua侧的异步回调
local function lua_async_test(seconds, coroutine_break)
    print('lua_async_test '..seconds..' seconds!')
    -- TODO:这里还是用Unity的协程相关API模拟异步,有需要的话再考虑在Lua侧实现一个独立的协程系统
    yield_return(CS.UnityEngine.WaitForSeconds(seconds))
    coroutine_break(true, seconds)
end

-- lua侧新建协程:本质上是在Lua侧建立协程,然后用异步回调驱动,
local corotineTest = function(self, seconds)
    print('NewCoroutine: lua corotineTest', self)
    
    local s = os.time()
    print('coroutine start1 : ', s)
    -- 使用Unity的协程相关API:实际上也是CS侧协程结束时调用回调,驱动Lua侧协程继续往下跑
    -- 注意:这里会在CS.CorotineRunner新建一个协程用来等待3秒,这个协程是和self没有任何关系的
    yield_return(CS.UnityEngine.WaitForSeconds(seconds))
    print('coroutine end1 : ', os.time())
    print('This message1 appears after '..os.time() - s..' seconds in lua!')
    
    local s = os.time()
    print('coroutine start2 : ', s)
    -- 使用异步回调转同步调用模拟yield return
    -- 这里使用cs侧的函数也是可以的,规则一致:最后一个参数必须是一个回调,回调被调用时表示异步操作结束
    -- 注意:
    --    1、如果使用cs侧函数,必须将最后一个参数的回调(cs侧定义为委托)导出到[CSharpCallLua]
    --    2、用cs侧函数时,返回值也同样通过回调(cs侧定义为委托)参数传回
    local boolRetValue, secondsRetValue = util.async_to_sync(lua_async_test)(seconds)
    print('coroutine end2 : ', os.time())
    print('This message2 appears after '..os.time() - s..' seconds in lua!')
    -- 返回值测试
    print('boolRetValue:', boolRetValue, 'secondsRetValue:', secondsRetValue)
end

-- 协程热更示例
xlua.hotfix(CS.UIRankMain, 'Open', function(self, param, pathData)
    print('HOTFIX:Open ', self)
    -- 省略其它代码
    -- 方式一:新建Lua协程,优点:可新增协程;缺点:使用起来麻烦
    print('----------async call----------')
    util.coroutine_call(corotineTest)(self, 4)--相当于CS的StartCorotine,启动一个协程并立即返回
    print('----------async call end----------')
    
    -- 方式二:沿用CS协程,优点:使用方便,可直接热更协程代码逻辑,缺点:不可以新增协程
    self:StartCoroutine(self:TestCorotine(3))
end)

-- cs侧协程热更
xlua.hotfix(CS.UIRankMain, 'TestCorotine', function(self, seconds)
    print('HOTFIX:TestCorotine ', self, seconds)
    --注意:这里定义的匿名函数是无参的,全部参数以闭包方式传入
    return util.cs_generator(function()
        local s = os.time()
        print('coroutine start3 : ', s)
        --注意:这里直接使用coroutine.yield,跑在self这个MonoBehaviour脚本中
        coroutine.yield(CS.UnityEngine.WaitForSeconds(seconds))
        print('coroutine end3 : ', os.time())
        print('This message3 appears after '..os.time() - s..' seconds in lua!')
    end)
end)

转载请注明出处:http://www.cnblogs.com/jietian331/p/8118230.html

lua常用方法收集的更多相关文章

  1. Lua 错误 收集

    不存在的变量或者变量没有定义,提示错误 // :: [error] #: * lua entry thread aborted: runtime error: /opt/openresty/nginx ...

  2. lua错误收集

    这里放一些我遇到的lua错误,希望大家分享一些错误给我,统一放在这里. 1.lua表的引用传值 上面的代码运行后会发现t2[2],t2[3]表里的内容也被删除了,实际上它们 与t2[1]表里的内容都是 ...

  3. js常用方法收集

    JS获取地址栏制定参数值: //获取URL参数的值 function getUrlParam(name){ var reg = new RegExp("(^|&)"+ na ...

  4. lua . 命令收集

    io.popen()## 原型:io.popen ([prog [, mode]]) 解释:在额外的进程中启动程序prog,并返回用于prog的文件句柄.通俗的来说就是使用这个函数可以调用一个命令(程 ...

  5. php apache 和mysql查看版本常用方法收集

    php: 1.命令行查询,下图是因为添加php进系统环境变量了 2.预定义常量PHP_VERSION查询 3.phpversion()函数查询 4.phpinfo()查询 apache: mysql: ...

  6. Lua语言中文手册 转载自网络

    Programming in LuaCopyright ® 2005, Translation Team, www.luachina.net Programming in LuaProgramming ...

  7. Javascript常用方法函数收集(二)

    Javascript常用方法函数收集(二) 31.判断是否Touch屏幕 function isTouchScreen(){ return (('ontouchstart' in window) || ...

  8. 使用nginx lua实现网站统计中的数据收集

    导读网站数据统计分析工具是各网站站长和运营人员经常使用的一种工具,常用的有 谷歌分析.百度统计和腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于ja ...

  9. ios开发总结:Utils常用方法等收集,添加扩展类,工具类方法,拥有很多方便快捷功能(不断更新中。。。)

    BOBUtils 工具大全 本人github开源和收集功能地址:https://github.com/niexiaobo [对ios新手或者工作一年以内开发人员很有用处] 常用方法等收集.添加扩展类. ...

随机推荐

  1. 恒生UFX接口引用计数心得

    本文介绍在基于恒生T2SDK基础上开发对接UFX柜台时,有关引用计数的一些心得体会. 下面以配置接口和连接接口为例子来介绍,下面是文档介绍: 创建配置接口说明: 3.1.2 创建配置接口(NewCon ...

  2. [原] MyBatis 整理

    花了一上午的时间,先整理一个脑图.

  3. ubuntu中python3安装package

    1.实验环境 Ubuntu16.04x86 + python3.5 ubuntu中同时存在python2.7 和 python3.5 2.pip使用说明 sudo pip install packag ...

  4. C++对windows控制面板的操作

    经常碰到程序无法卸载, 就老是骂微软搞的什么安装方式,安装好了不能卸载. 后来就打算研究一下windows是如何卸载程序的,一个程序安装完后留下了什么信息用于后面的卸载. 研究对象win7 64位, ...

  5. mybatis03--字段名和属性名不一致

    1.修改数据库中的字段 2.运行根据id查询所有的学生信息的测试方法会出现下面的异常 也就是说明 数据库中的字段没有个实体类中的属性名一致 3.修改StudentMapper.xml文件中的列名 4. ...

  6. eclipse哪个版本好

    Eclipse IDE for Java EE Developers (企业级开发软件,干啥都足够了,300MB左右)

  7. Oracle课程档案。第十一天

    读一致性:oracle通过多版本与闪回机制保证读一致性.保证从某个时间点开始查询是一致的.在Oracle中主要通过SCN版本号来控制系统修改的版本,典型的例子是我们可以通过在同一个查询中得到同一个对象 ...

  8. python全栈开发 * 24 知识点汇总 * 180705

    24 模块-------序列化一.什么是模块 模块:py文件就是一个模块.二.模块的分类:(1)内置模块 (登录模块,时间模块,sys模块,os模块)(2)扩展模块 (itchat 微信有关,爬虫,b ...

  9. Prime Flip AtCoder - 2689

    发现我们每次区间取反,相邻位置的正反关系只有两个位置发生改变 我们定义bi为ai和ai-1的正反关系,即ai=ai-1时bi=0,否则bi=1,每次取反l~r,b[l]和b[r+1]会发生改变 容易发 ...

  10. lucene学习教程

    1Lucene的介绍 ①Lucene是什么: 是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎 ②Lu ...