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

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

  1. 横板格斗类游戏实战:游戏数值策划表

    游戏数值表在游戏设计中非常的关键,策划可以通过表格工具与表格公式来做好游戏的数值,程序当表格是一个配置文件,直接读入数据即可.游戏数值策划表是数值策划与程序沟通对接的主要的方式, 所以对项目开发来说非 ...

  2. 横板格斗类游戏实战:战斗核心玩法

    上一节讲解了游戏的周边,如登陆奖励,任务,商店等,本节来分析游戏战斗中的一些核心的玩法.点击"开始战斗",进入地图选关模式.如图2.2-1. 图2.2-1 对啦!这里有个游戏开发交 ...

  3. QT横板格斗小游戏——基于网编的重构

    QT横板格斗小游戏--基于网编的重构 一.项目概览 二.具体功能设计 2.1 Npc基类 2.2 Boss子类 2.3 Hero类 2.4 Widget类 2.5 GameContral基类 2.6 ...

  4. 格斗类游戏和休闲类游戏不同

    前阵子我开发了Match3D, 一个可以把三维动画输出成为swf的工具, 而且实现了swf渲染的实时三维角色动画, 这可以说是我真正推出的第一个flash第三方软件, 其实这以前, 我曾经开发过几个其 ...

  5. 格斗类游戏的键盘处理

    格斗类游戏对于键盘的要求极高,因此,键盘处理就成了格斗类游戏的一个极其重要的部分,现在就让我们谈谈电脑上格斗类游戏键盘处理的实现. 在电脑上使用格斗游戏不同于家用机和街机,家用机和街机使用的是操作手柄 ...

  6. **[游戏测评]**点评新游《骇厉四斩》分析动作格斗类游戏设计

    今天带来的是Steam今年2月份上市的新游 --<Hellish Quart(骇厉四斩)>的分析评测.我会带领大家了解这款游戏,分享我自己的游戏体验,并从游戏专业的角度对这款游戏的设计进行 ...

  7. 用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单

    系统主菜单如下图所示: 首先,介绍下这个主菜单,它包含了一个动画logo以及一个按钮选项,动画logo每隔1秒钟切换一张图片,点击相应的按钮选项会切换不同的游戏场景. 下面看下这个界面的源码: /** ...

  8. 微信小程序开发笔记 进阶篇③——onfire.js事件订阅和发布在微信小程序中的使用

    文章目录 一.前言 二.onfire.js介绍 三.API介绍 四.实例应用 五.onfire源码 六.实例源码 一.前言 微信小程序开发笔记--导读 二.onfire.js介绍 一个简单实用的事件订 ...

  9. 一个事件订阅和发布的库(onfire.js)的源码浅析

    文章目录 一.onfire.js介绍 二.API介绍 三.变量浅析 四.订阅函数浅析 五.发布函数浅析 六.全部源码 一.onfire.js介绍 一个简单实用的事件订阅和发布的库. onfire.js ...

最新文章

  1. 微信小程序下拉刷新真机无法弹回
  2. 关于合成的拷贝控制成员的一点问题
  3. printf函数与主函数问题
  4. Sentinel(十三)之动态规则扩展
  5. [react] 你有使用过loadable组件吗?它帮我们解决了什么问题?
  6. mysql参数之innodb_buffer_pool_size大小设置
  7. python汉字排序_【IT专家】Python中文排序(转载)
  8. RDBMS DML DDL
  9. 微信小程序中识别html标签的方法
  10. 事件--[Asp.Net]
  11. layuimini tab切换刷新解决方案
  12. HART协议学习记录
  13. 经典的传染病模型简介 + SIS情况分析
  14. java.io.IOException: Unable to establish loopback connection
  15. 创建型——单例模式(Singleton)总结
  16. 炼数成金 课件整理数据分析与R语言 第1周
  17. redis sadd 命令 以及 删除set集合或者单独删除set中的一/多条记录
  18. SPSS(十七)SPSS之判别分析进阶(图文+数据集)
  19. awesome-face-anti-spoofing
  20. 椭圆曲线上的群和构造方法

热门文章

  1. ESP8266--esp8266-alink-v1.0学习笔记(一)
  2. 【海思篇】【Hi3516DV300】十八、TSENSOR 芯片温度检测驱动 开发
  3. NAS入门之——My Cloud EX2 Ultra初始化设置
  4. 企业MES实施与供应链追溯
  5. 炉石传说android闪退,《炉石传说》安卓版闪退解决办法
  6. System.getProperty(user.dir)定位问题
  7. 单元测试总结反思_单元考试反思总结.docx
  8. 区块链以太坊学习笔记
  9. 至联云IPFS/Filecoin同样具有合法性
  10. 鹤壁异地公积金组合贷款攻略