Skip to content

事件通讯说明

当前支持四种类型的事件消息机制,分别为全局事件、节点事件、自定义事件以及服务端游戏世界事件。以下是针对这四种事件消息使用方法的详细介绍。

全局事件

typescript
/**
 * 全局事件总线实例化,支持由创作者自定义事件。
 *
 * Emitter 是一个全局管理事件实例,用于在整个应用中统一管理事件的触发和监听。
 * 它允许通过 `on`、`once`、`off` 等方法注册或移除事件监听器,并支持事件的触发和通知。
 *
 * 示例用法:
 * ```typescript
 * // 注册事件监听器,当收到say事件时,打印事件文本
 * Emitter.on('say', (text) => {
 *   console.log(text);
 * });
 *
 * // 触发say事件,并传入事件文本
 * Emitter.emit('say', 'Hello, world!');
 * ```
 */
export const Emitter = new EventEmitter();

节点事件

typescript
/**
 * 每个节点都配备独立的消息事件器,用于实现该节点下组件间的事件传递与通信,且与其他节点互不干扰。
 *
 * @example
 * ```typescript
 * const node = new EntityNode(world.querySelector("#实体名称")!);
 * node.on('say', (text) => {
 *   console.log(text);
 * });
 * ```
 */
export class EntityNode<T = any> extends EventEmitter ;

自定义事件

typescript
/**
 * 事件消息管理,支持由创作者自定义事件。
 *
 * EventEmitter 是一个管理事件类,用于在应用中管理事件的触发和监听。
 * 它允许通过 `on`、`once`、`off` 等方法注册或移除事件监听器,并支持事件的触发和通知。
 *
 * 示例用法:
 * ```typescript
 * // 创建一个事件发射器实例
 * const emitter = new EventEmitter();
 *
 * // 注册事件监听器,当收到say事件时,打印事件文本
 * emitter.on('say', (text) => {
 *   console.log(text);
 * });
 *
 * // 触发say事件,并传入事件文本
 * emitter.emit('say', 'Hello, world!');
 * ```
 */
export class EventEmitter extends BaseEventEmitter<string>;

服务端游戏世界事件

typescript
/**
 * 服务端世界游戏事件的实例化。
 *
 * GameWorldEvent 是一个 {@link GameWorld} 世界管理相关事件实例,用于处理与游戏世界相关的事件。
 * 它允许通过 `on`、`once`、`off` 等方法注册或移除事件监听器,并支持事件的触发和通知。
 *
 * 示例用法:
 * ```typescript
 * // 注册事件监听器,当玩家加入游戏时触发
 * GameWorldEvent.on(world.onPlayerJoin, ({ entity }) => {
 *   console.log(entity.player.name);
 * });
 * ```
 */
export const GameWorldEvent = new GameEvent<GameEventChannel<any>>(world);

构造函数

EventEmitter()

实例化一个事件消息类

返回值

类型说明
EventEmitter事件类

方法

on()

注册事件监听

输入参数

参数必填默认值类型说明
eventNamestring事件名称
callback(...args: any[]) => void回调函数
targetthisany目标对象

once()

注册单次事件监听,触发后自动移除

输入参数

参数必填默认值类型说明
eventNamestring事件名称
callback(...args: any[]) => void回调函数
targetthisany目标对象

off()

移除事件监听

输入参数

参数必填默认值类型说明
eventNamestring事件名称
callback(...args: any[]) => void回调函数
targetthisany目标对象

emit()

触发事件

输入参数

参数必填默认值类型说明
eventNamestring事件名称
...argsany[]参数列表

dispatchEvent()

派发一个事件对象,所有监听该事件类型的监听器都会被通知。

GameEventClass 类下无此方法。

输入参数

参数必填默认值类型说明
IEvent.typestring事件类型,用于标识事件的种类
IEvent.targetthisany事件目标,可选属性,表示触发该事件的元素或对象
[x: string]: anyobject其他任意值

hasEventListener()

检查是否有特定事件的监听者

输入参数

参数必填默认值类型说明
eventNamestring事件名称

返回值

类型说明
boolean是否有监听者

removeAll()

移除所有事件监听


targetOff()

移除指定目标的所有事件监听

输入参数

参数必填默认值类型说明
targetany目标对象