# 事件

# 分发事件

使用引擎(Engine)的dispatchEvent接口分发事件。

// 分发可见性改变事件
engine.dispatchEvent( {

    type: 'visiblechanged', // 事件类型,不可缺
    visible: false

} );
1
2
3
4
5
6
7

# 监听事件

使用引擎(Engine)的addEventListener接口监听事件。

// 监听内置实体点击事件(方式1)
import { EventType } from '@tx3d/core';

engine.addEventListener( EventType.ENTITY_CLICK, ( event ) => {

    // TODO:事件回调

} );

// 监听内置实体点击事件(方式2)
egine.addEventListener( 'entityclick', ( event ) => {

    // TODO:事件回调

} );

// 分发自定义事件
engine.dispatchEvent( { type: 'customevent' } );

// 监听自定义事件
engine.addEventListener( 'customevent', ( event ) => {

    // TODO:事件回调

} );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

提示

当前可监听的内置事件,详见EventType

设置监听优先级

// 设置监听优先级
import { EventType, Priority } from '@tx3d/core';

// 使用枚举设置优先级
engine.addEventListener( EventType.ENTITY_CLICK, ( event ) => {}, { priority: Priority.HIGH } );

// 直接使用数值设置优先级
engine.addEventListener( EventType.ENTITY_CLICK, ( event ) => {}, { priority: 80 } );
1
2
3
4
5
6
7
8

提示

监听器默认优先级为Priority.NORMAL(即50),可以使用Priority或数值(值越大优先级越高)设置优先级。

设置回调函数运行时this指针

import { EngineObject, EventType } from '@tx3d/core';

/**
 * 相机监听器
 */
class CameraListener extends EngineObject {

    constructor( engine ) {

        super( engine );

        // 监听相机改变事件
        this.engine.addEventListener( EventType.CAMERA_CHANGED, this.onCameraChanged, { target: this } );

    }

    /**
     * 响应相机改变事件
     */
    onCameraChanged( event ) {

        // TODO:相机改变事件响应

    }

    /**
     * 释放接口
     */
    dispose() {

        // 移除相机改变事件监听
        this.engine.removeEventListener( EventType.CAMERA_CHANGED, this.onCameraChanged );

    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 移除事件监听

🌏 使用引擎(Engine)的removeEventListener接口移除监听。

// 实体单击事件监听回调
const listener = ( event ) => {

    // TODO:实体单击事件响应

}

// 监听实体单击事件
engine.addEventListener( 'entityclick', listener );

// 移除实体单击事件监听
engine.removeEventListener( 'entityclick', listener );
1
2
3
4
5
6
7
8
9
10
11
12

🌏 使用引擎(Engine)的removeEventListenerByEventId接口移除监听。

// 监听实体单击事件
const eventID = engine.addEventListener( 'entityclick', ( event ) => {

    // TODO:实体单击事件响应

} );

// 移除实体单击事件监听
engine.removeEventListenerByEventId( eventID );
1
2
3
4
5
6
7
8
9
Last Updated: 9/2/2022, 3:05:47 PM