游戏开发之UI管理器(跨引擎)

使用UI管理器的目的

  1. 使用单场景与zindex结合的方式管理UI。
  2. 能够隐藏底层UI达到优化效果。
  3. 很好的组织和管理UI。
  4. 跨引擎使用。

管理器分类

根据以往经验我开发了三种类型的管理器,队列管理器,栈式管理器,单UI管理器。

  1. 单UI管理器:SingleManager负责管理如登录,loading,大厅,游戏这样的一级UI,同一时刻只有一个UI实例存在。UI之间是替换关系。
  2. 栈式管理器:StackManager用于管理先进后出的UI,弹出功能UI使用。
  3. 队列管理器:QueueManager用于管理先进先出的UI,用于第一次进入大厅弹出各种活动UI时候使用,关闭一个弹出另一个。
  4. 类图 image.png

将UI分为五层

  1. 第一层:使用单UI管理器用于管理,大厅,游戏等一级界面。
  2. 第二层:使用栈式管理器 管理二级界面
  3. 第三层:使用队列管理器用于管理进入游戏时弹出的各种活动面板。
  4. 第四层:使用栈式管理器用于管理toast,tip等提示框。
  5. 第五层:为最上层,使用栈式管理器,用于管理教学,对话界面和网络屏蔽层等。

特别说明:比如将一个战斗UI分为战斗层和按钮层,这个不属于管理器范畴。

  1. 结构图

代码

  1. 为了跨引擎使用,需要将各个引擎的组件抽象。

    export default interface LayerInterface {
    
     exit(): void;
     /**
      * 设置组件是否可见
      * @param f 
      */
     setVisible(f: boolean): void;
     /**
      * 设置组件节点的zroder
      * @param order 
      */
     setOrder(order: number): void;
     /**
      * 
      * @param t 管理器层级
      */
     setUIIndex(t: number): void;
    
     getUIIndex(): number;
     /**
      * 获得组件的node
      */
     getNode(): any;
     isLoad(): boolean;
    

}

2. 管理器的父类

import LayerInterface from "./LayerInterface"; export default abstract class LayerManager {

//根节点
protected root: any;

protected list: LayerInterface[]

//管理器中的内容是否可以被删除
protected popFlag: boolean = false;

protected zOrder: number = 1;

constructor(zOrder: number = 1, canPop: boolean = true) {
    this.list = []
    this.zOrder = zOrder;
    this.popFlag = canPop;
}
init(node: any) {
    this.root = node;
}
setZOrder(order: number) {
    this.zOrder = order;
}
getZOrder(): number {
    return this.zOrder;
}
canPop() {
    return this.popFlag;
}
//ui数量
count() {
    return this.list.length;
}
setVisible(flag: boolean) {
    for (let index = 0; index < this.list.length; index++) {
        const element = this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值