构建复杂游戏/应用的神器:broadcast #8
AILHC
started this conversation in
Game Development Blogs
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
前言
事件机制,相信很多人都知道,了解,也经常用到。
在设计模式中,它叫 观察者模式(又叫发布-订阅模式)。
它无处不在:
在Java中,它是Java的核心库java.utils.Observable,
在**C#**中,为它提供了语法糖支持:event关键字
在web浏览器的Javascript中,有内置的事件机制:window.addEventListener,Event
在Nodejs中,也有内置库events
在游戏引擎中也都是内置的存在
使用这种模式可以让我们更好地解耦游戏业务逻辑。
但是
这些事件机制的在Js和ts中的实现没能让我觉得满意(我都是使用过),总觉得缺了点什么。
突然有一天逛掘金,看到这么一个文章分享:
构建复杂应用的神器,FBroadcast
看完后,脑子里只有一个字: 这就是我想要的神器
我喜欢逛掘金,虽然他们大多是分享web前端相关的知识,但也有很多可以借鉴用到游戏前端的地方。受益匪浅。
介绍
一个基于TypeScript的一套高效灵活的广播系统,可以帮助开发者轻松、有序的构建具有极具复杂性的关联交互和状态变化的游戏和应用。
特性
安装/获取
源码获取
npm 安装
注意⚠️
如果所在项目不支持直接使用npm包
则需要到dist文件夹下,取出可以使用的模块规范类型的文件
比如CocosCreator3D,支持systemjs规范
使用
broadcast允许在注册/发送消息时,携带任意类型数据,并支持类型提示
broadcast允许在注册消息时,给自己透传数据(而非通过闭包取闭包外数据的方式)
闭包使用不当容易出问题。
开发者可以选择将特定类型的消息进行持久化,这样就能轻易实现广播式的全局状态管理。
粘性广播
当广播系统中没有对应类型的接收器时,粘性广播 将会暂时滞留在系统中,直到有该类型的接收器被注册,则会立即发出广播(当广播系统中有对应类型的接收器时,就和普通广播具有相同的表现)。
双向通信
broadcast支持在广播发送点接收接收器返回的消息。
支持函数this绑定或任意类型作为 环境绑定
在CocosCreator中注册事件可以这样
这个this可以用来调用showAnimView这个方法,不至于调用的方法里使用this时丢失this
而在broadcast中也支持,还支持在环境解构时,开发者可以方便的一次性移除所有在该环境中注册的接收器。
支持批量注册接收者
基本的使用就这些了
具体的使用例子可以克隆仓库:EasyGameFramework
看基于CocosCreator2.4.2的demo examples/egf-ccc-full/assets/tests/broadcastTest
打开这个场景:broadcastTest.fire
看demo之前,需要安装环境哦,
安装 npm ,然后到egf-ccc-full 根目录
极度舒适的类型提示演示
演示
demo测试展示
最后
欢迎关注我的公众号,更多内容持续更新
公众号搜索:玩转游戏开发
或扫码:![img](https://camo.githubusercontent.com/56f4c8384c8fd7a744f31f48ab64b84ce277606484aa393a47b1d9eae05f34d1/68747470733a2f2f70332d6a75656a696e2e62797465696d672e636f6d2f746f732d636e2d692d6b3375316662706663702f61626430633134633963393534653536616632306164623731666130306461397e74706c762d6b3375316662706663702d7a6f6f6d2d312e696d616765)
QQ 群: 1103157878
博客主页: https://ailhc.github.io/
掘金: https://juejin.cn/user/3069492195769469
github: https://github.com/AILHC
Beta Was this translation helpful? Give feedback.
All reactions