tolua框架学习(七)

14 篇文章 3 订阅
10 篇文章 2 订阅

      案例9,讲解的是在lua中使用C#字典。lua片段中涉及到了迭代字典,获取指定键的值,删除键值对等操作。本示例基本和之前讲解数组的案例差不多。而后面一个案例10讲解的是使用枚举,使用步骤都是差不过的。这两个例子唯一不同的地方是Build部分,枚举的例子是直接调用的LuaBuilder.Build()方法,而字典的例子则是自定义写的一个Build方法,里面有很多注册的资源都是LuaBuild中没有的。关于这一点,可以在以后探究一下。

可以在以后探究一下。

     案例11讲解是使用委托。lua脚本中执行了一些方法。C#中初始化了一些LuaFunction对象。初始化lua虚拟机,同时调用LuaBinder.Bind(state)方法,注册基本的命名空间,类等等信息,同时注册了自定义的一个类TestEventListener,和其中的两个委托OnClickVoidDelegate。 另外一点就是,这里将LuaStateLogGC属性设置为true。

     获取lua脚本中的方法,初始化之前定义的LuaFunction对象。

     后面创建了一个内嵌class,TestEventListener_OnClick_Event,继承自LuaDelegate。构造方法接受一个LuaFunction参数。内部有Call()方法,用于执行function。

     TestEventListener_OnClick(LuaFunction func, LuaTable self, bool flag)方法是在注册过程中用到的方法,该方法返回TestEventListener.OnClick。当func为空的时候,返回空的委托方法。否则创建TestEventListener_OnClick_Event对象(用func创建的),同时,返回Call方法。TestEventListener_OnClick_Event类应该是和该方法配套使用的。

配套使用的。

       下面同样是一个内嵌类TestEventListener_VoidDelegate_Event和一个方法TestEventListener_VoidDelegate。该类和方法和上面介绍的几乎相同。

       TestEventListener类的内容如下:内部申明了两个委托,一个事件,一个func委托。如下图:

如下图:

        后面是一系列的测试方法,写成了按钮的形式。测试了委托的赋值(+=,-=),执行委托,事件的增加,删除,执行等。其中,对于委托的增和删,也做了C#版,通过C#获取lua中的function,然后通过该方法创建委托,最后再赋值。注意,对于委托的删除,这里是直接用的DelegateFactory.RemoveDelegate(LuaFunction func)方法,然后在Depose该func,没有使用“-=”操作符。

操作符。

       接下来测试了在lua中重写C#的方法。这里重写方法,就是借助了那两个内嵌类。执行该方法的时候,在Push()阶段,会从LuaState中的metaMap字典中中获取对应类(TestEventListener)的引用,然后压入UserData,在PCall()这一步,就调用到了TestEventListener对应的Wrap文件的中的TestEventListener_OnClick()方法,该方法对应于TestEventListener中的OnClick方法。这一步,我猜测就是lua脚本中的对应的TestEventListener.OnClick(DoClick1)过程,

过程,

在Create这一步中,会调用到内嵌类中的TestEventListener_OnClick()方法中去。

       最后的AddSelfClick方法其实本质上和上面的重写方法没有区别。不同点在于参数中,这一点是lua中的“.”和“:”的区别。

这一点是lua中的“.”和“:”的区别。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值