creator中Button能否在脚本中实现点击事件的模拟,有没有类似node.click()之类的方法,在指定的时机触发某Button的click方法?
CCButton.js中定义了按钮点击结束时相应的处理函数:
_onTouchEnded: function (event) {
if (!this.interactable || !this.enabledInHierarchy) return;
if (this._pressed) {
cc.Component.EventHandler.emitEvents(this.clickEvents, event);
this.node.emit('click', this);
}
this._pressed = false;
this._updateState();
event.stopPropagation();
},
由此可见,按钮点击事件是存放在this.clickEvents数组里面的。
再来观看clickEvents的结构:
/**
* !#en If Button is clicked, it will trigger event's handler
* !#zh 按钮的点击事件列表。
* @property {Component.EventHandler[]} clickEvents
*/
clickEvents: {
default: [],
type: cc.Component.EventHandler,
tooltip: CC_DEV && 'i18n:COMPONENT.button.click_events',
}
可以发现,CCButton的clickEvents储存的是cc.Component.EventHandler的变量,关于cc.Component.EventHandler的说明见api说明
所以,通过代码为button添加一个处理函数的代码如下:
var eventHandler = new cc.Component.EventHandler();
eventHandler.target = newTarget;
eventHandler.component = "MainMenu";
eventHandler.handler = "OnClick";
eventHandler.customEventData = "my data";
this.button.clickEvents.push(eventHandler);
这里,this.button是一个cc.Button类型的对象,当点击该对象对应的按钮时,就会出发newTarget的MainMenu教程的OnClick(my data)函数。
谢谢回复,但是这个是给按钮添加事件,而我要的是在代码里去模拟用户点击了这个按钮。
this.node.emit(‘click’)
1赞
this.button._onTouchEnded();
没有_onTouchEnded 这个api
无法触发
可以用 btn.clickEvents[0].emit() 来模拟触发
1赞
亲测可行
this.node.getComponent(cc.Button).clickEvents[0].emit([‘click’]);
2赞