地址: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
游戏服务器架构丨分布式技术丨大数据丨游戏算法学