事件

游戏中对象的通信方式

框架中的事件对象类型是 mk.EventTarget,继承于 cc.EventTarget,且所有接口都是类型安全的 📦

创建事件对象#

interface EventType {
    /** 测试事件 */
    test: (
        /** 测试参数 */
        num: number
    ) => string;
}

const event = new mk.EventTarget<EventType>();

事件派发#

event.emit(event.key.test, 123);

事件监听#

当使用 emit 派发事件时, 可以使用 ononce 接口监听指定的事件派发

const onTest = (): void => {
	// ...事件回调逻辑
};

event.on(event.key.test, onTest, this);

事件注销#

当想要取消 ononce 注册的事件回调时,可以使用 offtargetOff 取消事件监听

// 取消类型为 test 的事件
event.off(event.key.test);
// 取消类型为 test 且回调函数为 onTest 的事件
event.off(event.key.test, onTest);
// 取消类型为 test 且回调函数为 onTest 且事件目标为 this 的事件
event.off(event.key.test, onTest, this);
// 取消所有事件目标为 this 的事件
event.targetOff(this);

事件请求(框架扩展)#

事件请求接口 request 相当于 emit,但是可以获取 ononce 回调函数的返回值

Promise.all(event.request(event.key.test, 123)).then((resultList) => {
    // 所有 test 类型事件的返回值
    console.log(resultList);
});