请教一下怎么重写Button组件

如题:

我想在引擎提供的cc.Button基础上 扩展出一个点击就能播放特定动画,或者声音的组件。

然后我继承了cc.Button 但是这些属性都暴露出来了,貌似没初始化成功,
引擎里面的修改_updateState按钮状态是私有的(我又不想修改引擎的内部)

我找了一下以往的帖子,貌似说是要开编辑器模式,我用的ts,不知道这样写对不对,没效果。

请问一下大家有什么其他的好方法吗?

没有的话我就自己写个按钮组件了。

没有,我是让自定义组件和cc.Button共存,不算很好的做法

cc.Button自定义了 inspector,所以有特定的属性面板……
至于它的inspector代码在哪我也找不到……一直是未解之谜。

你在creator上打开开发者工具,button的inspector就在Source的inspector文件夹下面,这个要重写inspector文件就好了。

cc.Button.prototype._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();

        //可以在这里做一些捕获全局自定义事件的操作,如:统一的按钮点击音效
      
    
    }
1赞

处理回调用自定义组件做,点击效果用button

谢谢各位大佬的帮助
不知道大家说的是不是 resources\engine\cocos2d\core\components下的CCButton.js
1、button.js 有找到一推,只是在 Source目录下对应的inspector button没找到

2、cc.Button.prototype._onTouchEnded 的 prototype里没有_onTouchEnded 这个函数

你可以整个按钮声音组件挂按钮就可以了

const { ccclass, property,requireComponent } = cc._decorator;

@ccclass
@requireComponent(cc.Button)
export default class ClickAudioss extends cc.Component {

    @property(cc.AudioClip)
    AudioClip:cc.AudioClip = null;
    @property({min:0,max:1,slide:true})
    volume:number = 1; 

    onLoad() {
        this.node.on(cc.Node.EventType.TOUCH_END, this._playAudio, this);
    }
    onDestroy() {
        this.node.off(cc.Node.EventType.TOUCH_END, this._playAudio, this);
    }
    _playAudio() {
        if (this.AudioClip) {
            cc.audioEngine.play(this.AudioClip, false, this.volume);
        }
    }

}