社区开源框架事件模块:EventManager详解

tech2025-02-04  16

地址:https://github.com/Golangltd/LollipopCreator

框架文档地址:GameAIs.Com

LollipopCreator:EventManager

LollipopCreator游戏框架

游戏客户端开发中,由于制作人或者策划立项的不同,导致前端开发并不像后端框架不变,例如 2D游戏开发,引擎选择就比较多,Unity、cocos、 白鹭等都可以,本系列就是给大家开源一套cocos creator引擎开发的2D游戏框架LollipopGo。 creator 系统为例,给大家梳理下前端2D游戏架构的基础设计思想。

Index

返回首页

如何设计

调用流程

实例代码

如何设计

1. 前端事件注册、收、发不同模块等 2. 主要是跨模块事件处理

调用流程

例子: emit(name) { let list = this.events[name] || [] let args = Array.prototype.slice.call(arguments) args.shift() cc.log("eventMgr.emit", name, list.length, JSON.stringify(args)) list.forEach((it) => { try { it.cb.apply(null, args) } catch (err) { cc.error('EventManager emit error.', name, err) } }) } 注意点:事件派发逻辑,主要是不同模块的事件的处理

实例代码

'use strict' class EventManager { constructor() { this.events = {} } unique(name, target, cb) { this.events[name] = [] this.on(name, target, cb) } on(name, target, cb) { this.events[name] = this.events[name] || [] this.events[name].push({ target: target, cb: cb, name: name, }) } off(name, target) { let list = this.events[name] || [] let arr = [] let cnt = 0 list.forEach((it) => { if (name == null || it.name == name) { if (it.target == target) { ++cnt return } } arr.push(it) }) if (cnt > 0) { this.events[name] = arr } } emit(name) { let list = this.events[name] || [] let args = Array.prototype.slice.call(arguments) args.shift() cc.log("eventMgr.emit", name, list.length, JSON.stringify(args)) list.forEach((it) => { try { it.cb.apply(null, args) } catch (err) { cc.error('EventManager emit error.', name, err) } }) } } window.eventMgr = new EventManager()

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

Golang语言社区

ID:Golangweb

www.GameAIs.Com

www.ByteEdu.Com

www.ByteEdu.Org

游戏服务器架构丨分布式技术丨大数据丨游戏算法学

最新回复(0)