借鉴 DAG-有向无环图 单向调度 对游戏里边杂乱的红点系统设计的思考

DAG 有向无环图 单向调度

每一个需要显示红点的地方可以认为是一个node节点,这个node节点可能有很多父节点也有很多孩子节点,将这
些节点串联起来就构成了一个图,而上面一些列节点的显示与否全都取决于最下面的那个节点。如果最后一个节点
的数据要求它显示,那么这个节点的所有父节点都要显示,如果这个节点不需要显示则通知所有父节点不需要显示
了,但是这个父节点是否真正不需要显示还得检查改节点的所有孩子节点是否都已经不显示了,如果不显示了才真正
的不显示,如果有有一个还显示,那它就得继续显示。

notify show: 如果一个节点被通知要显示就把自己的状态字段置为true,并把则该节点的所有父节点的这个状态字段置为true

clear: 如果一个节点被通知不显示,则首先需要检查该节点的所有孩子节点的状态字段是否为false(不显示),如果都为false(不显示了)自己
的状态字段才会被设置为false(不显示),有一个节点的状态还为true(显示)自己的状态字段就得还设置为true。

RedPointNode 每个节点都有自己唯一的ID,这些节点知道知道自己父亲节点ID,也知道自己孩子节点的ID
RedPointManager 用来管理这些节点构成的一条条路径图

RedPointManger 初始化的时候就要把配置好的一个个路径点加进来,每个node的配置是这样的{ID,UIName,ImgRedPoint,{Parents}},
这里的Parents也是一系列node的ID,遍历这个数组new出一个个路径点,并用UIName ImgRedPoint Parents来初始化,

RedPointManager里边得有一个以ID为key的数组(_arrNodeID)专门用来存这些节点,初始化节点之后还得遍历Parents 在_arrNodeID
里边找父节点 如找到,就把该节点的ID添加到父节点的children数组中

一个界面可能有多个节点,所以RedPointManager里边还需要有一个以UIName和ImgRedPoint为key的map,即map[UIName][ImgRedPoint] = node_instance

这个界面打开的时候,RedPointManager就通过UIName 在这个map中找到改界面的所有红点 即map[UIName],遍历这个红点node,为这些node设置他的UIObj,
(这个node通过UIObj和红点node的名字肯定能找到正真红点UI控件),然后刷新这个红点的显示状态。

猜你喜欢

转载自www.cnblogs.com/hansenya/p/12574700.html
今日推荐