树的应用:游戏中的红点树,如何实现红点系统?

在之前的文章我讲解过了数据结构:树,二叉树等的基础知识与实现方式,对于树结构不懂的可以查看 二叉树基础(上):什么样的二叉树适合用数组来存储?

今天我们来通过树实现游戏中的红点系统。

 Damo地址:红点树

红点系统需要具备哪些能力?

  1. 支持多层级树结构,支持显示数量
  2. 可动态注册节点事件或撤销节点事件
  3. 需要显示红点的UI会注册一个节点的Key,可以是叶子结点也可以是非叶子结点。
  4. 当子节点的红点发生变化,向上递归的通知父节点发生改变。
  5. 使用红点系统的人只需要策划配置的红点key,与红点的具体数量,不需要关系其他节点与该节点的联系。

我将功能拆分成3个类

RedDotSystem:用来控制和刷新树的改变,消息监听和注册

RedDotNode: 红点树的结构

RedDotCompoent:红点组件,根据RedDotNode数据控制UI显示隐藏

RedDotSystem 核心的代码:

    public void SetRedDotCount(string key,int num)
    {
        CheckInit();

        if (!redDotDic.TryGetValue(key, out RedDotNode node))
        {
            Debug.LogError("not find RedDotNode Key:" + key);
            return;
        }

        if (node.HasChildren())
        {
            Debug.LogError("该节点是根节点,无法直接改变数值,通过修改子节点的数量改变");
            return;
        }

        node.SetCount(num);
        
        // 通知父物体
        RedDotNode parent = node.parent;
        while (parent != null)
        {
            Debug.Log("parent key : "+parent.Key);
            
            int parentNum = 0;
            for (int i = 0; i < parent.childrens.Length; i++)
            {
                parentNum  += parent.childrens[i].Count;
            }
            parent.SetCount(parentNum);
            parent = parent.parent;
        }
    }

时间复杂度:O(h) h为数的高度

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值