基於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會直接崩,而不會顯示錯誤。

最后,我想告訴大家,這個消息系統不推薦使用,因為報錯不會告訴你,下圖告訴了你們,這個是蒙哥的回復。。

