Lua模块间消息通信
发表于2015-10-14
本文介绍Lua模块间消息通信。
关于模块消息通信,常用小结:
有一对一模式,如一条command调用,直接找到对应的excuter;
有一对多模式,如类观察者模式的messageCenter;
还有原生的事件监听与分发等。
下面介绍Lua的一个类观察者模式,实现模块消息的注册监听、发送消息、消息处理、消息移除。缺点是需要遍历表里的数据,这里就不讨论各种优缺点了。
注册监听,就是往table里放消息id、注册对象、处理函数,因为不同对象里可以监听同id消息。如主界面玩家信息上的血条和场景里玩家头顶血条需要同时更新进度,就这个意思。
发送消息,利用消息id找到消息表里所有的监听,这是一对多模式,发送调用完即可。当然有时候我们也需要某些数据传过来,所以发送消息的时候也支持携带数据的。
如,某个地方初始化里有这样的监听:
此刻某地方有发送了这么一条消息并携带数据
那么上面的监听就会有响应了!具体说是id为id0的消息会做出响应!
消息移除,有些模块有不需要的消息监听可以提供移除处理,减少表的占用。
我们可以创建一个放所有消息id常量的Lua文件!
好了到这,感谢!