Cocos2d-x的UI树(2)

2015年03月22日 15:40 0 点赞 0 评论 更新于 2025-11-21 18:09

树的基本概念

树是由一系列节点组成的结构。在树中,除了根节点外,每个节点都有一个父节点;根节点没有父节点。除了叶子节点外,每个节点都有一个或多个子节点;叶子节点没有子节点。

Cocos2d-x中场景与树的关系

在Cocos2d-x里,每个场景都可以视为一棵独立的树。树中的每个节点都是Node子类的实例,根节点是Scene,它没有父节点(即其父节点为空)。

节点的添加操作

Node类的addChild方法用于将一个节点设置为该Node的子节点。每个Node都有一个Vector容器,用于存储其所有子节点。addChild方法会将指定节点添加到这个容器中,同时会设置子节点的tagname(设置name时会计算其哈希值,用于后续搜索)、parent_localZOrderOrderOfArrival(当Z值相同时,用于排序)。

若当前Node处于显示状态,addChild方法会调用子节点的onEnter方法(该方法是每个Node显示时调用的回调方法),并根据具体情况调用子节点的onEnterTransitionDidFinish方法(该方法是每个Node入场动画结束时调用的回调方法),同时调用NodeupdateCascadeColor(用于改变颜色)和updateCascadeOpacity(用于改变透明度)方法。

节点的查找操作

  • getChildByTag方法:该方法会循环搜索Node的所有子节点,根据指定的Tag找到目标子节点并返回。
  • getChildByName方法:依据节点的name和其对应的哈希值,查找所需的子节点。
  • getChildren方法:返回Node用于存储子节点的Vector容器。
  • getChildrenCount方法:返回Node的子节点数量。
  • enumerateChildren方法:用于查找指定的子节点,并对找到的子节点执行回调函数。

节点的父节点操作

  • setParent方法:用于设置Node的父节点。
  • getParent方法:返回Node的父节点。

节点的移除操作

单个节点移除

  • removeFromParent和removeFromParentAndCleanup方法:这两个方法会先判断Node是否有父节点。若有父节点,则调用父节点的removeChild方法。
  • removeChildByTag和removeChildByName方法:先根据TagName找到目标子节点,然后调用removeChild方法。
  • removeChild方法:执行子节点的onExitTransitionDidStart方法(该方法是每个Node出场动画开始时调用的回调方法)和onExit方法(该方法是每个Node出场时调用的回调方法)。如有必要,会停止子节点及其所有子节点的动作和调度器,并将子节点的父节点设置为null,最后从父节点的容器中删除该子节点。

全部节点移除

removeAllChildrenWithCleanupremoveAllChildren方法功能类似,其主要逻辑与removeChild方法相似,会对所有子节点执行退出回调函数,停止它们的动作,将父节点设置为空,并清空父节点的容器。

作者信息

menghao

menghao

共发布了 3994 篇文章