游戏开发:红点提示系统

游戏开发:红点提示系统

  • 前言
  • 红点管理器概述
  • 代码

前言

日常搬砖,前两天接到一个做红点的功能,考虑到红点再后面会用到很多地方,所以简单做了个红点管理器,记录一下!

红点管理器概述

1、这里把所有红点的关系看做树的结构(每个节点有零个或一个直接父节点,有零个或多个直接子节点)

2、设置红点的显示和隐藏只需要设置树结构最底下的红点就可以了,然后递归设置其父节点的红点

代码

1、先定义红点结构

// An highlighted block
export type IconObjct = {
    isShow:boolean,			   //红点是否显示
    parentsType:RedIconTypes,  //直接父节点,有零个或一个
    childTypes:RedIconTypes[]  //直接子节点,有零个或多个
}

2、红点管理器类

export default class RedIconManager {
    constructor(){
        this._allIconMap = new Map_();
        /*//在构造管理器的时候,直接初始化好红点树
        let discoveryIconObjct:IconObjct = {
            isShow:false,
            parentsType:null,
            childTypes:[RedIconTypes.RedIconBag,RedIconTypes.RedIconMail]
        }
        this._allIconMap.set(RedIconTypes.RedIconDiscovery,discoveryIconObjct);
        */
    }
    //定义一个map,用来存储所有红点对象
    private _allIconMap:Map_;  //{key:红点类型名; value:红点数据结构IconObjct}
    //设置红点显示,如果有直接父红点,递归设置直接父节点的红点
    showRedIconByType(type:RedIconTypes){
        let iconObjct:IconObjct = this._allIconMap.get(type);
        iconObjct.isShow = true;
        fdk.postNotify(type,{"isShow":iconObjct.isShow});
        if(iconObjct && iconObjct.parentsType){
            this.showRedIconByType(iconObjct.parentsType);
        }
    }
    //设置红点隐藏,如果有父红点,遍历父红点上的所有子红点,如果所有的子红点都隐藏了,那么父红点也隐藏
    hideRedIconByType(type:RedIconTypes){
        let iconObjct:IconObjct = this._allIconMap.get(type);
        iconObjct.isShow = false;
        fdk.postNotify(type,{"isShow":iconObjct.isShow});
        if(iconObjct && iconObjct.parentsType){
            //遍历父红点的直接子节点
            let parentsObjct:IconObjct = this._allIconMap.get(iconObjct.parentsType);
            let isFindShow:boolean = false;
            for(let j = 0; j < parentsObjct.childTypes.length; ++j){
                let chiidObjct:IconObjct = this._allIconMap.get(parentsObjct.childTypes[j])
                if(chiidObjct && chiidObjct.isShow){
                    isFindShow = true;
                    break;
                }
            }
            if(!isFindShow){
                this.hideRedIconByType(iconObjct.parentsType);
            }
        }
    }
}
        

红点管理器的思路和大概代码就是这样子了,在使用的时候,只需要设置最底层(没有直接子节点的)的红点显示和隐藏,管理器会递归设置他所有的父节点上的红点。

你可能感兴趣的:(cocos,开发)