我们以button为例来说明一下cocos怎样为节点添加事件:
直接通过cocos熟悉检查器绑定
添加事件脚本
import { _decorator, Component, Node, input, Input, Button, EventKeyboard } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('Attack')
export class Attack extends Component {
attackBegin(event: Event, customEventData: string) {
console.log(event);
console.log(customEventData);
console.log("攻击选中");
}
}
点击事件Event的类型是:EventTouch(手机、浏览器手机模式)或者EventMouse(电脑)
这样绑定,可以捕获到单击和双击事件,双击事件会被当场2次单击。
cocos中绑定Button节点、代码组件中为Button节点添加事件
import { _decorator, Component, Node, input, Input, Button, EventKeyboard } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('Attack')
export class Attack extends Component {
@property(Button)
button: Button | null = null;
onLoad () {
this.button.node.on(Button.EventType.CLICK, this.attackBegin, this);
}
attackBegin (button: Button) {
console.log(button);
console.log("攻击选中");
}
}
这样绑定,也可以捕获到单击和双击事件,双击事件会被当场2次单击。
但是没有办法自定义事件数据,事件的参数也是button本身。
完全代码中实现绑定
import { _decorator, Component, Node, input, Input, Button, EventKeyboard } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('Attack')
export class Attack extends Component {
onLoad() {
let button = this.node.getComponent(Button);
// 手动创建一个事件
let handler = new Component.EventHandler();
// 要响应事件的节点
handler.target = this.node;
// 脚本的名字,注意大小写,检查文件名和class名是否一直
handler.component = "Attack";
// 自定义事件数据
handler.customEventData = "EventHandler customer data";
// 事件回调方法
handler.handler='attackBegin';
// 将事件添加到点击事件列表中
button.clickEvents.push(handler);
}
attackBegin(event: Event, customEventData: string) {
console.log(event);
console.log(customEventData);
console.log("攻击选中");
}
}
这种方式,就不需要在cocos中绑定了,只需要给button添加脚本组件即可。
其实,这种方式就是第1中的代码实现方式,手动在clickEvents添加了事件,而不是再cocos属性检查器中配置。