横板格斗类游戏实战:事件订阅与发布系统

105 篇文章 23 订阅
45 篇文章 12 订阅
本文介绍了如何在游戏中通过事件订阅与发布模块,实现玩家角色血量变化的UI实时更新,避免玩家逻辑与UI组件耦合,提升代码灵活性。通过创建EventMgr单例,定义事件接口,监听并发布事件,详细展示了设计与实现过程。
摘要由CSDN通过智能技术生成

玩家在游戏战斗过程中,被某个怪物把血打掉了,然后界面上的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,把代码阅读一遍,完整的掌握事件订阅与发布模块的编写与实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值