想监听全局的button,能让它点击的时候播放一段声音。有什么快捷的方法么?
想监听触摸屏幕的话就给canvas添加事件,想所有按钮点击都播放声音,那就写个脚本处理,把这脚本给所有btn挂上。

那就回归给组件一个一个添加的本质了。哈哈哈哈
你可以自己外挂一个按钮点击的组件,里面处理播放声音,这样就不用在每个点击事件写代码了。
现在是这样操作的,就是每个按钮的节点都得拖一次脚本进去
修改Button原型cc.Button.prototype._onTouchEnded的这个方法
赞
想问一下您怎么写的方法合并呢?原有的_onTouchEnded也是有作用域的
_onTouchEnded (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();
},
onLoad监听click事件或者直接加在this.node.emit(‘click’, this)后面应该都可以吧。
我尝试了各种的方法,发现原型链的方法覆盖有点难度,最后放弃了,用了最蠢的方法。这个方法只需要修改到一个全局的脚本。这段代码只需要写在较早的生命周期里面,加载到全局即可。
cc.Button.prototype._onTouchEnded = (event) => {
// 我这里是为了让全局的按钮都能播放一个声音,不想一个一个添加,懒人
// 需要使用的修改这部分即可,this指向的是对应脚本
cc.audioEngine.play(this.buttonAudio, false)
// 下面这面这部分是改变原先_onTouchEnded的this指向,应该还有一个更简便的方法,而不需要定义self
let self = event.target.getComponent(cc.Button)
if (!self.interactable || !self.enabledInHierarchy) return;
if (self._pressed) {
cc.Component.EventHandler.emitEvents(self.clickEvents, event);
self.node.emit('click', self);
}
self._pressed = false;
self._updateState();
event.stopPropagation();
}
2赞
求完整代码啊大佬