toLua消息监听和发送(LuaframeWork)

基于uLua/toLua的Luaframework的lua框架的事件系统

此文所讲的消息系统为Luaframework里面自带的消息系统,由于此功能有一些致命的问题,所以不建议大家使用,下一篇我讲一下一个新的消息系统。

新的消息系统内容地址:http://www.cnblogs.com/vsirWaiter/p/7590445.html

github地址:https://github.com/jarjin/LuaFramework_NGUI

Luaframework为了我写好了消息的监听和发送,也就是观察者模式的使用方式。

如下图:这个是events.lua,并非event.lua

eventlib是消息处理的一个库。

enents是作者为使我们更方便,仿造的C#的消息模式。

我们去调用这个事件系统的使用方式如下:

local EventTest = require "events"

function Main()					
	print("logic start")	 
	EventTest.AddListener("1",EvenetTest)
	EventTest.Brocast("1",2,3)
end

function EvenetTest(f1,f2,f3)
	print(f1) --2
	print(f2) --3
	print(f3) --nil
	print("我执行了事件")
end

我们实际上是使用的events里面的Event这个表。

注意点:

1、require后面是跟的文件名“events”,如果require "Event"的话,会告诉你返回的是一个bool类型的值,就无法由我们去使用了。

2、传递的事件的协议号,也就是上述代码EventTest.AddListener中的参数1,这个必须为string类型,因为这是luaframework定义好了,我们可以去修改,但是基于框架的东西尽量不要去修改吧,所以我们还是按照作者的思路去使用string类型的值作为消息传递的协议号。

3、消息发送的参数,可以与执行的方法的参数不一致,如果你如上述代码代码传递2和3两个参数,则方法执行时f1、f2分别对应2、3,f3的值则为nil。

4、重点注意:回调里如果有报错,lua会直接崩,而不会显示错误。

最后,我想告诉大家,这个消息系统不推荐使用,因为报错不会告诉你,下图告诉了你们,这个是蒙哥的回复。。

原文地址:https://www.cnblogs.com/vsirWaiter/p/7584316.html