cocos creator从零开发简单框架(10)-UI更新

UI打开后,别的地方数据更新了可能要通知UI同时更新,这时需要有更新UI的接口。

编辑framework/scripts/AppUtil.ts,添加getClassName方法获取View类名。

public static getClassName(viewCls: any): string {
    return (new viewCls() as ViewBase).getClassName()
}

编辑framework/scripts/view/UIMgr.ts,添加isAliveupdateView方法。

/** 判断是否当前 UI */
public static isAlive(uiCls: any): boolean {
    const viewName = AppUtil.getClassName(uiCls)

    return this._current != null && viewName == this._current.uiName
}

/** 更新 UI */
public static updateView(uiCls: any, ...args: any[]): boolean {
    if (!this.isAlive(uiCls)) return false

    this._current.updateView(args)

    return true
}

编辑scripts/UIMain.tsscripts/UIBag.ts,重载onUpdateView方法。

protected onUpdateView(args: any[]): void {
    cc.log('args:', args)
}

编辑scripts/Main.ts,修改onLoad方法。

protected onLoad(): void {
    App.init()

    UIMgr.open(UIMain)

    // 5 秒后调用
    this.scheduleOnce(() =>  {
        if (!UIMgr.updateView(UIMain, '血量-10', '体力-5')) {
            cc.error('更新 UIMain 失败')
        }
    }, 5)

    // 10 秒后调用
    this.scheduleOnce(() =>  {
        if (!UIMgr.updateView(UIBag, '血量+10', '金币-10')) {
            cc.error('更新 UIBag 失败')
        }
    }, 10)
}

运行程序,在合适的时机切换Bag界面,查看日志输出。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!