返回顶部
首页 > 资讯 > 前端开发 > JavaScript >详解CocosCreator消息分发机制
  • 532
分享到

详解CocosCreator消息分发机制

2024-04-02 19:04:59 532人浏览 泡泡鱼
摘要

概述 本篇开始介绍游戏业务架构相关的内容。在游戏业务层,所有需要隔离的系统和模块间通信都可以通过消息分发解耦。例如网络返回通知、数据更新同步到界面等。 消息分发基于观察者模式设计。需

概述

本篇开始介绍游戏业务架构相关的内容。在游戏业务层,所有需要隔离的系统和模块间通信都可以通过消息分发解耦。例如网络返回通知、数据更新同步到界面等。

消息分发基于观察者模式设计。需要处理消息的地方向消息中心注册监听回调,派发消息时,调用消息中心的派发接口遍历该消息的监听队列,调用对应的回调方法。

具体方案

先定义监听回调类型



export type NotifyListener = (src: any, data: any) => void;

通过key-value方式保存监听队列


private static msg2listDict: Dictionary< string, Array<NotifyListenerInfo> > = new Dictionary< string, Array<NotifyListenerInfo> >();

接口定义



public static addListener(msg: string, listener: NotifyListener, target?: any): void {}
 

public static addOnceListener(msg: string, listener: NotifyListener, target?: any): void {}
 

public static removeMsgListener(msg: string, listener: NotifyListener): void {}
 

public static removeMsgAllListeners(msg: string): void {}
 

public static removeTargetMsgListen(msg: string, target: any): void {}
 

public static removeTargetAllMsgListen(target: any): void {}
 

public static notify(msg: string, src: any, data: any): void {}

在添加移除实现中,需要注意某消息可能正在派发。

对于一个消息新添加的监听者,应该在当前队列消息派发完后再派发,因此,添加一个待添加队列


private static listener2add: Array<NotifyListenerInfo> = [];

在添加监听者时做以下判断


// 该消息正在派发,放入待添加队列
if (NotifyCenter.notifyMsgs.indexOf(msg) >= 0) {
    NotifyCenter.listener2add.push(info);
    return;
}

同样在移除监听者时,可能正在派发消息,避免对队列的修改导致for循环异常,添加一个待移除队列,派发消息时,如果该监听者在移除队列则不派发。在消息派发完后再将其移出队列


private static listener2remove: Array<NotifyListenerInfo> = [];

在移除监听者时做以下判断


// 该消息正在派发,放入待移除队列
if (NotifyCenter.notifyMsgs.indexOf(msg) >= 0) {
    NotifyCenter.listener2remove.push(list[i]);
} else {
    list.splice(i, 1);
}

派发消息时遍历指定消息下的队列


// 队列不存在,不需要处理
let list = NotifyCenter.msg2listDict.get(msg);
if (!list) {
    return;
}
 
// 标记消息正在派发,多个消息可能同时在派发,同一消息可能标记多次
NotifyCenter.notifyMsgs.push(msg);
 
// 处理消息派发
for (let i = 0, n = list.length; i < n; i++) {
    NotifyCenter._dispatch(list[i], src, data, false);
}

派发消息时先判断是否在移除队列


// 在移除队列,不派发
if (NotifyCenter.listener2remove.indexOf(info) >= 0) {
    return;
}

当前队列派发完后检查待添加队列


// 处理待添加队列派发
for (let i = 0, n = msg2add.length; i < n; i++) {
    if (listener2add[i].msg == msg) {
        NotifyCenter._dispatch(listener2add[i], src, data, true);
    }
}

引入消息分发中心,隔离的系统、模块间通过消息监听和派发通信,避免互相引用耦合。

以上就是详解CocosCreator消息分发机制的详细内容,更多关于CocosCreator消息分发的资料请关注编程网其它相关文章!

--结束END--

本文标题: 详解CocosCreator消息分发机制

本文链接: https://lsjlt.com/news/123701.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解CocosCreator消息分发机制
    概述 本篇开始介绍游戏业务架构相关的内容。在游戏业务层,所有需要隔离的系统和模块间通信都可以通过消息分发解耦。例如网络返回通知、数据更新同步到界面等。 消息分发基于观察者模式设计。需...
    99+
    2024-04-02
  • CocosCreator消息分发机制的示例分析
    这篇文章将为大家详细讲解有关CocosCreator消息分发机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述本篇开始介绍游戏业务架构相关的内容。在游戏业务层,所有需要隔离的系统和模块间通信...
    99+
    2023-06-14
  • 详解CocosCreator项目结构机制
    目录 一、项目文件夹结构1.资源文件夹(assets)2.资源库(library)3.本地设置(local)4.扩展插件文件夹(packages)5.项目设置(settin...
    99+
    2024-04-02
  • Android Handler消息派发机制源码分析
    注:这里只是说一下sendmessage的一个过程,post就类似的 如果我们需要发送消息,会调用sendMessage方法 public final boolean s...
    99+
    2022-06-06
    handler 源码 Android
  • Python并发编程线程消息通信机制详解
    目录1 Event事件2 Condition3 Queue队列4 总结一下前面我已经向大家介绍了,如何使用创建线程,启动线程。相信大家都会有这样一个想法,线程无非就是创建一...
    99+
    2024-04-02
  • Android开发App启动流程与消息机制详解
    目录引言1、第一步了解 ThreadLocal2、App的启动流程3、Activity中创建Handler引言 相信很多人对这个问题不陌生,但是大家回答的都比较简单,如谈到app启动...
    99+
    2024-04-02
  • Android中消息机制分析
    本文中的源码基于Android 29; 一、概述 对于Android开发者而言,我们处理异步消息用的最多的也是轻车熟路的一种方式,就是使用Handler进行消息的分发和处理。但...
    99+
    2022-06-06
    消息机制 Android
  • Android Handler消息机制分析
    目录Handler是什么?Handler 的基本使用用法一:通过 send 方法用法二:通过 post 方法Handler 类MessageQueue 类Looper 类Handle...
    99+
    2024-04-02
  • android线程消息机制之Handler详解
    android线程消息机制主要由Handler,Looper,Message和MessageQuene四个部分组成。平常在开发中,我们常用来在子线程中通知主线程来更新,其实整个安卓生命周期的驱动都是通过Handler(ActivityThr...
    99+
    2023-05-30
    android 线程消息机制 handler
  • Android 消息机制详解及实例代码
    Android 消息机制 1.概述 Android应用启动时,会默认有一个主线程(UI线程),在这个线程中会关联一个消息队列(MessageQueue),所有的操作都会被封装成...
    99+
    2022-06-06
    消息机制 Android
  • Android消息处理机制Looper和Handler详解
    Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。 Handler:处理者,负责Messag...
    99+
    2022-06-06
    looper handler Android
  • Android编程中的消息机制实例详解
    本文实例讲述了Android编程中的消息机制。分享给大家供大家参考,具体如下: 在分析Android消息机制之前,我们先来看一段代码: public class MainAc...
    99+
    2022-06-06
    消息机制 Android
  • Android消息机制Handler的工作过程详解
    综述   在Android系统中,出于对性能优化的考虑,对于Android的UI操作并不是线程安全的。也就是说若是有多个线程来操作UI组件,就会有可能导致线程安全问题。所以在A...
    99+
    2022-06-06
    handler Android
  • RocketMQ消息重试机制原理分析讲解
    目录一、概述二、生产端的消息重试三、消费端的消息重试四、消息重试次数五、消息重试配置六、消息重试原理一、概述 由于网络抖动、服务宕机等一些不确定的因素,RocketMQ在发送消息的时...
    99+
    2023-02-13
    RocketMQ消息重试机制 RocketMQ消息重试
  • 源码分析Android的消息机制
    一、引言 ​Android消息机制主要指的是Handler的运行机制,是一块很有意思,也很有研究意义的内容。本文计划在较短的篇幅内,通过一定的源...
    99+
    2022-06-06
    消息机制 源码 Android
  • Android6.0 消息机制原理解析
    消息都是存放在一个消息队列中去,而消息循环线程就是围绕这个消息队列进入一个无限循环的,直到线程退出。如果队列中有消息,消息循环线程就会把它取出来,并分发给相应的Handler进...
    99+
    2022-06-06
    消息机制 Android
  • Android 消息分发使用EventBus的实例详解
    Android 消息分发使用EventBus的实例详解1. AndroidStudio使用dependencies { //最新版本 compile 'org.greenrobot:eventbus:3.0.0' //可以翻倍提高E...
    99+
    2023-05-30
    android eventbus roi
  • Android的消息机制
    一、简介 Android的消息机制主要是指Handler的运行机制,那么什么是Handler的运行机制那?通俗的来讲就是,使用Handler将子线程的Message放入主线程的...
    99+
    2022-06-06
    消息机制 Android
  • handler+message【消息机制】
    🍖🍖 作者 : 不良使 🍖🍖🍖🍖 潜力创作新星 华为云享专家 🍖🍖&...
    99+
    2023-09-18
    android
  • springboot中rabbitmq实现消息可靠性机制详解
    1. 生产者模块通过publisher confirm机制实现消息可靠性  1.1 生产者模块导入rabbitmq相关依赖 <!--AMQP依赖,包含Rabbit...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作