tolua使用的一些心得
1. 关于模拟枚举:
(1)首先设置起始的枚举值为LManagerID.LUIManager +1
(2)然后在表中添加枚举,注意要填写两次,一次是字符串一次是变量。
(3)调用ResetTableKeyValue函数,这里传的参数分别为起始值与枚举表。
(4)该方法的具体实现就是通过循环,里面的tmpTable[i]返回的是字符串,而外面的tmpTable[字符串]就表示把这个变量的值变成了beginValue+1。也就是对应枚举+1。这样后面就可以通过点来访问这个枚举值了。访问到的也就是具体的数字了。
2. 关于模拟面向对象:也就是模拟封装/继承与多态
这里使用new()函数作为构造函数。当调用这个函数时,就相当于建了一个子类,然后把父类设置成元表,最后返回了子类。(当你希望这个类被继承时,请写上该构造)
在使用的时候,先调用父类的构造函数。
然后设置this(可以不设置,就是为了用起来方便)。
然后使用元方法__index。只有设置了元方法才算是继承了父类。这个元方法的意思是如果在这个LRegisting表里没找到,那就去LRegisting的元表里去找。
3. 模拟协程:
coroutine.step(帧数,句柄,为等待结束继续执行时所需要的参数) 后两个参数可以没有
coroutine.yield() 挂起协程
step可以设定帧数。yield直接挂起协程,只有coroutine.resume() 可以重启协程
例子:这里要注意了,一定要用点来写方法。如果用冒号会自动调用!
4. 如何调用一些lua里没有的类的方法:
(1) 在项目中查找CustomSetting.cs文件,进入找到一个函数
(2) 把你要使用的类注册到这里
(3) 清空并重新generatorAll一下生成warp文件。
(4) 在lua中进行调用new()构造函数,或是addcomponent添加组件以获取实例!
在tolua-lua-unityEngine文件夹下已经封装好了一些unity中常用的值类型,可以不用包装就拿来使用。同样可以自定义一些功能类进行包装后在lua内使用。
5. 关于一些方法的使用:(待补充)
(1)GetComponent方法,传入的是string类型的参数。
(2)表的遍历:
(3)表的注意事项:
在使用任何表内数据的时候都要table.data进行调用,否则就是比对字符串,要加上双引号”” 如下面的id就要加上引号,因为前面没有加表名!
表在声明的同时赋值只能声明一层空间。如:
Table={}
Table[”1”][“2”]=2 会报错。
Table={{},{}}
Table[”1”][“2”]=2 编译通过并能正常赋值。
commonfuc 里面存放了lua方法的API。
通过generateAll把对应C#文件生成为wrap文件前,需要在CustomSetting里进行注册
(4)在lua里怎么去掉字符串的括号:
使用gsub函数,三个参数分别是:要编辑的字符串,被替换的字符,替换后的字符
其中括号要用中括号括上才能去掉,不然去不掉。(不能使用[(Clone)]会乱码)
(5)在lua中使用二维数组:
(6)生成随机数:math.random(x,y) math.abs求绝对值
(7)可变参数:Lua将函数的参数放在一个叫arg的表中
(8)#操作符,用来获取表中最大的键值,只对连续键值有效