跳至主要內容

事件

yisky大约 1 分钟基础知识文档事件

Fantasy 3D 提供了 EventDispatcher 作为事件类,对外提供事件订阅、退订、分发接口。

提示

EngineSceneComponent 均继承自 EventDispatcher,因此我们可以使用 enginescenecomponent 作为事件处理媒介。

事件方法

  • 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

} );
上次编辑于: