123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { _decorator, Button, Component, Node, PageView } 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;
- }
- 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);
- }
- onMsg(msg: string, callback: Function){
- }
- }
|