事件
大约 1 分钟基础知识文档事件
Fantasy 3D 提供了 EventDispatcher 作为事件类,对外提供事件订阅、退订、分发接口。
提示
Engine、Scene、Component 均继承自 EventDispatcher,因此我们可以使用 engine、scene、component 作为事件处理媒介。
事件方法
- on - 订阅事件。
import { EventType } from '@fantasy3d/core';
// 通过引擎对象订阅“帧循环开始”事件
engine.on( EventType.Before_Frame_Loop, () => {
// TODO:事件响应
} );
// 通过场景对象订阅“场景开始渲染”事件
scene.on( EventType.Before_Scene_Render, () => {
// TODO:事件响应
} );
- once - 订阅事件且仅响应一次。
import { EventType } from '@fantasy3d/core';
// 通过引擎对象订阅一次“帧循环开始”事件
engine.once( EventType.Before_Frame_Loop, () => {
// TODO:事件响应
} );
// 通过场景对象订阅一次“场景开始渲染”事件
scene.once( EventType.Before_Scene_Render, () => {
// TODO:事件响应
} );
- off - 取消事件订阅。
import { EventType } from '@fantasy3d/core';
// 通过引擎对象取消 run 函数的“帧循环开始”事件订阅
engine.off( EventType.Before_Frame_Loop, run );
// 通过场景对象取消 render 函数的“场景开始渲染”事件订阅
engine.off( EventType.Before_Scene_Render, render );
重要
“取消订阅”时如果不指定第二个参数,会取消该类型事件的所有订阅!
// 通过引擎对象取消“帧循环开始”事件的所有订阅
engine.off( EventType.Before_Frame_Loop );
// 通过场景对象取消“场景开始渲染”事件的所有订阅
scene.off( EventType.Before_Scene_Render );
- emit - 分发事件。
// 通过引擎对象分发“trigger”事件
engine.emit( {
type: 'trigger',
data: 1
} );
// 通过场景对象分发“trigger”事件
scene.emit( {
type: 'trigger',
data: 2
} );