UI树
来源:互联网 发布:windows界面开发主流 编辑:程序博客网 时间:2024/06/02 20:53
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是用于父节点的子节点数组中给节点对象排序的
0 0
- UI树
- web ui 树 ztree
- UI
- UI
- UI
- UI
- ui
- UI
- UI
- ui
- ui
- ui
- Ui
- UI
- ui
- UI
- UI
- Ui
- Leetcode: Product of Array Except Self (60ms) analysis and solution
- vm虚拟机本地连接已连接上 但为什么上不去网
- druid.io sql支持
- Linux2.6.32驱动笔记(3)分析应用程序read访问驱动过程
- 关于阅读那些大神的开源库的一些感想
- UI树
- python面向对象
- Android学习——Frame动画、Shape动画
- 微信支付之认识微信支付开发
- C#方便操作数据总结
- SQL Server中的三种物理连接图文解析:Loop Join,Merge Join,Hash Join
- const在函数前与函数后的区别
- LeetCode Longest Valid Parentheses
- Java 里把 InputStream 转换成 String 的几种方法