| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | import { _decorator, Button, Component, Label, Node, PageView, Sprite } from 'cc';const { ccclass, property } = _decorator;export enum UIType {    PAGE,    WIDGET,    POPWIN,}@ccclass('UIBase')export class UIBase extends Component {    protected _nodes: Map<string, Node> = new Map();    protected _uiName: string = "ui";    get UIName() { return this._uiName; }    set UIName(name: string) { this._uiName = name; }    //如果使用ui都要进行相同的初始化    init() {        this._visit(this.node)        //多态        this.onStart();    }    //各个ui都有不同的初始化行为    protected onStart() {    }    private _visit(node: Node) {        //如果这个节点的名字是 “ _ ” 开头的 就是需要操作的节点        if (node.name.startsWith("_")) {            this._nodes.set(node.name, node);        }        for (const child of node.children) {            this._visit(child);        }    }    show() {        this.node.active = true;        this.use();    }    showing() {        return this.node.active;    }    //true -> 销毁  false -> 不销毁  默认销毁    hide(clear: Boolean = true) {        this.unUse();        if (clear) {            this.node.destroy();            return;        }        this.node.active = false;    }    //多态    //用它的时候    protected use() {    }    //不用它的时候    protected unUse() {    }    //UI 事件    //按钮点击    onBtnClick(name: string, callback: Function, ...arg) {        const node = this._nodes.get(name);        if (node) {            node.on(Button.EventType.CLICK, () => {                //apply指定函数的this指向 并且立即执行                //参数1 就是函数执行过程中的this指向                callback.apply(this, [...arg]);            })        }    }    //pageView的事件    onPageView(name: string, type, callback: Function) {        this._nodes.get(name).on(type, callback);    }    getPageView(name: string): PageView {        return this._nodes.get(name).getComponent(PageView);    }    getNode(name: string): Node {        return this._nodes.get(name);    }    getSprite(name: string): Sprite{        return this.getNode(name).getComponent(Sprite);    }    getLabel(name: string): Label{        return this.getNode(name).getComponent(Label);    }    onMsg(msg: string, callback: Function) {    }}
 |