UI树
2015-09-17 23:14
253 查看
cocos2dx使用localZOrder来表示元素的逻辑深度,UI树的遍历使用中序(in-order)的深度优先算法进行遍历
中序遍历顺序:
1.遍历左边的子节点,2.遍历根节点,3.遍历右边的子节点
主要用于遍历二叉树(cocos2dx 按元素的层级关系来组织一棵“二叉树”,左子节点表示所有逻辑深度小于0的子元素,右子节点表示所有逻辑深度大于或等于0的子元素)
tips:UI在遍历的时候,如果元素的位置不发生变化,则不会对每帧计算模型视图变化矩阵
cocos2dx 3.0新增globalZOrder
新的判断逻辑:
1,默认每个元素的globalZOrder值为0.
2,如果一个元素的globalZOrder值不为0,则按globalZOrder值进行排序
3,否则,则按localZOrder值进行排序
内存管理
将子元素添加进UI树时,Node使用Vector<T>来存放
重用元素Tip:
从一个父元素移动到另一个父元素,需要将其转换为一个新的autorelease对象,并且要防止对象在被移出UI树时被释放
auto node = parent-> getchildbytag(10); //引用计数为1
node->retain(); //增加引用计数防止被释放,引用计数为2
node->removefromparent(); // 计数为1
node->autorelease; //加入池
parent2->addchild(node); //引用计数为2
当前帧结束后,引用计数变为1
全局 Z 值
Node 增加了新的函数 setGlobalZOrder() / getGlobalZOrder() 。
setZOrder() / getZOrder() 被替代为 setLocalZOrder() / getLocalZOrder() 。
globalZOrder 是一个float(不是int)的参数。这个值在渲染器中用来给RenderCommand排序。较低的值拥有较高的优先级。这意味着一个globalZorder为-10的节点会比一个globalZOrder为10 的节点优先绘制。
globalZOrder 为 0 (默认值)的节点将会根据 Scene Graph 顺序绘制。
如果 globalZOrder 不变的话,Cocos2d-x v3.0 和 Cocos2d-x v2.2 行为一致。
globalZOrder() 和 localZOrder():
* globalZOrder是用于渲染器中用来给“绘制命令”排序的
* localZOrder是用于父节点的子节点数组中给节点对象排序的
中序遍历顺序:
1.遍历左边的子节点,2.遍历根节点,3.遍历右边的子节点
主要用于遍历二叉树(cocos2dx 按元素的层级关系来组织一棵“二叉树”,左子节点表示所有逻辑深度小于0的子元素,右子节点表示所有逻辑深度大于或等于0的子元素)
tips:UI在遍历的时候,如果元素的位置不发生变化,则不会对每帧计算模型视图变化矩阵
cocos2dx 3.0新增globalZOrder
新的判断逻辑:
1,默认每个元素的globalZOrder值为0.
2,如果一个元素的globalZOrder值不为0,则按globalZOrder值进行排序
3,否则,则按localZOrder值进行排序
内存管理
将子元素添加进UI树时,Node使用Vector<T>来存放
重用元素Tip:
从一个父元素移动到另一个父元素,需要将其转换为一个新的autorelease对象,并且要防止对象在被移出UI树时被释放
auto node = parent-> getchildbytag(10); //引用计数为1
node->retain(); //增加引用计数防止被释放,引用计数为2
node->removefromparent(); // 计数为1
node->autorelease; //加入池
parent2->addchild(node); //引用计数为2
当前帧结束后,引用计数变为1
全局 Z 值
Node 增加了新的函数 setGlobalZOrder() / getGlobalZOrder() 。
setZOrder() / getZOrder() 被替代为 setLocalZOrder() / getLocalZOrder() 。
globalZOrder 是一个float(不是int)的参数。这个值在渲染器中用来给RenderCommand排序。较低的值拥有较高的优先级。这意味着一个globalZorder为-10的节点会比一个globalZOrder为10 的节点优先绘制。
globalZOrder 为 0 (默认值)的节点将会根据 Scene Graph 顺序绘制。
如果 globalZOrder 不变的话,Cocos2d-x v3.0 和 Cocos2d-x v2.2 行为一致。
globalZOrder() 和 localZOrder():
* globalZOrder是用于渲染器中用来给“绘制命令”排序的
* localZOrder是用于父节点的子节点数组中给节点对象排序的
相关文章推荐
- Cocos2d-x中背景音乐和音效使用实例
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例
- Cocos2d-x UI开发之文本类使用实例
- Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法
- Cocos2d-x UI开发之菜单类使用实例
- Cocos2d-x UI开发之CCControlButton控件类实例
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
- Cocos2d-x学习笔记之CCLayerColor层的使用实例
- Cocos2d-x Schedule定时器的使用实例
- Cocos2d-x中使用CCScrollView来实现关卡选择实例
- Cocos2d-x中CCEditBox文本输入框的使用实例
- cocos2d-x学习笔记之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex场景层介绍
- Cocos2d-x UI开发之CCControlSlider控件类使用实例
- Cocos2d-x学习笔记之开发环境搭建
- Cocos2d-x学习笔记之Hello World!
- Cocos2d-x的内存管理总结
- Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决
- Cocos2d-x入门教程(详细的实例和讲解)