玩家在游戏战斗过程中,被某个怪物把血打掉了,然后界面上的UI血条的数值就要发生变化,如图: 1.7-1
(如图1.7-1)
按照一般的处理方式,我们在战斗的逻辑里面掉血后,要去找到UI界面中的某个节点,把数值给它设置好。一个查找还好,要是多个地方需要改变数值,多个节点都需要被改变,玩家战斗逻辑,不可能每个节点都去找一下,然后设置一下,这样也不灵活,也不方便扩展。这样就相当于玩家Player对象与要更新显示的这些对象耦合在一起了。所以就需要编写一个模块来解耦,这个模块就是事件订阅与发布模块。针对上面的情况,如何解耦呢?
事件订阅与发布模块具体如何设计呢?新建一个单例事件管理组件类EventMgr,这个单例组件实例化到GameApp节点上。如图1.7-2
(图1.7-2)
events_map是一个表,存放了哪些监听者对哪些事件感兴趣。当events_map里面有数据的时候,数据结构如下: { “事件名字1”: [监听者1{caller, func}, 监听者2], “事件名字2”: []}
接下来我们来看下提供给监听者的监听事件接口如图1.7.3:
(图1..7-3)
当我们要监听某个事件的时候,传入事件的名字,回调时的this对象(caller), 回调函数func。
接下来我们来看下如何派送发布一个事件,如图1.7.4:
(图1..7-4)
今天的教程分享就到这里,具体代码可以阅读EventMgr.ts,把代码阅读一遍,完整的掌握事件订阅与发布模块的编写与实现。