# 事件
# 分发事件
使用引擎(Engine)的dispatchEvent接口分发事件。
// 分发可见性改变事件
engine.dispatchEvent( {
type: 'visiblechanged', // 事件类型,不可缺
visible: false
} );
1
2
3
4
5
6
7
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
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
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
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
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
2
3
4
5
6
7
8
9