记录一下,或许同样使用深度的NGUI以后会用到。

目前的项目的UI是用Stage3D实现的,采用了类似NGUI填写深度来确定覆盖关系,但同时可以使用的深度是有一个固定范围的,导致的问题是如果UI过多深度可能就会不够用,对于这种情况可以写段代码进行深度的压缩,比如如果两个图片相互之间不会重叠则可以使用同一个深度。

相对于传统的显示列表,每个深度都唯一的情况不同,压缩后的深度可以有多个是相同的,但是相同深度的图片不能重叠,否则会出现随机覆盖的问题。

压缩深度的前提条件是所有UI的遮罩顺序都必须是提前设定好的。

基本的思路如下:从最底层的UI开始逐个处理到最上层的UI,如果发现有重叠的UI,且这个重叠的UI是在自己的下方,那么我的深度就是这个UI的深度+1,同时可能我下方会有多个UI都和我重叠,所以我的深度应该是下方所有和我重叠的UI的深度的最大值+1。

代码实现如下:

 1 var depthList:Vector.<int> = getDepthList(this);
 2 //打印结果
 3 for(var i:int = 0; i < depthList.length; i++)
 4 {
 5     trace("元件\"" + getChildAt(i).name + "\"的深度是: " + depthList[i]);
 6 }
 7
 8 /**
 9  * 获取指定容器下的最小深度列表,按子对象z轴由下到上的顺序排列其深度数值.
10  */
11 function getDepthList(target:DisplayObjectContainer):Vector.<int>
12 {
13     var result:Vector.<int> = new Vector.<int>(target.numChildren, true);
14     //结果数组使用 0 填充
15     var i:int;
16     for(i = 0; i < target.numChildren; i++)
17     {
18         result[i] = 0;
19     }
20
21     for(i = 0; i < target.numChildren; i++)
22     {
23         var child:DisplayObject = target.getChildAt(i);
24         getChildDepth(target, child, i, result);
25     }
26
27     return result;
28 }
29
30 function getChildDepth(target:DisplayObjectContainer, child:DisplayObject, index:int, result:Vector.<int>):void
31 {
32     for(var i:int = 0; i < target.numChildren; i++)
33     {
34         var targetChild:DisplayObject = target.getChildAt(i);
35         //过滤掉自己
36         if(targetChild == child)
37         {
38             continue;
39         }
40         //只处理位于当前显示对象下方的显示对象
41         if(i < index)
42         {
43             //只处理相互存在重叠的显示对象
44             if(targetChild.hitTestObject(child))
45             {
46                 //获取深度, 下方所有对象的深度必然都已经获得, 直接 + 1 即可
47                 var depth:int = result[i] + 1;
48                 //如果存在更大的深度就使用更大的深度
49                 if(result[index] < depth)
50                 {
51                     result[index] = depth;
52                 }
53             }
54         }
55     }
56 }

附上测试文件,可以拖拽UI来查看压缩后的深度。

http://pan.baidu.com/s/135JHG

压缩UI深度的代码实现相关推荐

  1. 论文合集 | 李飞飞新论文:深度学习代码搜索综述;Adobe用GAN生成动画(附地址)...

    来源:机器之心 本文约3200字,建议阅读7分钟. 本文介绍了李飞飞新论文,深度学习代码搜索综述,Adobe用GAN生成动画. 本周有李飞飞.朱玉可等的图像因果推理和吴恩达等的 NGBoost 新论文 ...

  2. 如何才能信任你的深度学习代码?

    深度学习是一门很难评估代码正确性的学科.随机初始化.庞大的数据集和权重的有限可解释性意味着,要找到模型为什么不能训练的确切问题,大多数时候都需要反复试验.在传统的软件开发中,自动化单元测试是确定代码是 ...

  3. CSDN技术主题月----“深度学习”代码笔记专栏

    from: CSDN技术主题月----"深度学习"代码笔记专栏 2016-09-13 nigelyq 技术专题 Hi,各位用户 CSDN技术主题月代码笔记专栏会每月在CODE博客为 ...

  4. python批量解压文件_python 批量解压压缩文件的实例代码

    下面给大家介绍python 批量解压压缩文件的实例代码,代码如下所述: #/usr/bin/python#coding=utf-8import os,sys import zipfile open_p ...

  5. python图像等比例压缩_python使用pil进行图像处理(等比例压缩、裁剪)实例代码

    PIL中设计的几个基本概念 1.通道(bands):即使图像的波段数,RGB图像,灰度图像 以RGB图像为例: >>>from PIL import Image >>&g ...

  6. PyCharm社区版支持深度学习_在Windows的Ubuntu子系统运行支持CUDA的深度学习代码

    2020年6月,微软公布了Windows Subsystem for Linux 2的最新更新,全面支持CUDA和N卡GPU.在Windows上跑Ubuntu子系统并在其中运行GPU加速的深度学习代码 ...

  7. python深度学习代码列子

    以下是一个简单的深度学习代码的例子,可以帮助你了解深度学习的基本概念和实现方法. # Import necessary libraries import tensorflow as tf import ...

  8. 3080算力添加、ValueError: Unknown CUDA arch (8.6) or GPU not supported 解决RTX30 运行深度学习代码报错

    ValueError: Unknown CUDA arch (8.6) or GPU not supported 解决RTX30 运行深度学习代码报错 之前安装pytorch的时候有遇到一个问题,不支 ...

  9. python压缩图片像素_python使用pil进行图像处理(等比例压缩、裁剪)实例代码

    PIL中设计的几个基本概念 1.通道(bands):即使图像的波段数,RGB图像,灰度图像 以RGB图像为例: 2.模式(mode):定义了图像的类型和像素的位宽.共计9种模式: 3.尺寸(size) ...

最新文章

  1. Storm构建分布式实时处理应用初探(转)
  2. Java算法之 选择排序
  3. 爬虫笔记:Urllib库详解
  4. 部署nodejs项目到服务器的一些总结
  5. 选择通过更改内容类型返回的详细程度,第二部分
  6. sql获取日期相差天数oracle,找到oracle sql中两个日期之间的经过时间
  7. mac写html图片显示不出来解决方法
  8. 读《卓有成效的管理者》笔记(二)
  9. 记一次Jenkins 打包异常 ERROR: Exception when publishing, exception message [Failure]
  10. 加密算法实现数据通讯
  11. linux服务器开启公网访问_如何在外网用SSH访问内网LINUX服务器?
  12. 笔记本使用的几大盲区
  13. Cloudera Manager 配置
  14. Ubuntu安装有道词典出现缺少依赖关系问题
  15. 提升企业网站用户体验 你不可不知的秘诀
  16. java使用Aspose.pdf实现pdf转图片
  17. Android开发之摇一摇
  18. PageHelper分页永远返回第一页数据
  19. 你也可以是天才,心有多大,舞台就有多大
  20. 使用Lucene开发简单的站内新闻搜索引擎(环境的搭建)

热门文章

  1. c语言仓库即存储器,计算机基础4
  2. 迪士尼小哥转行测试,月薪翻倍:成年人的童话世界, 需要自己创造
  3. 匹配左括号或者右括号js_九章算法 | 蚂蚁金服面试题:有效的括号字符串
  4. php随机分配的方法,PHP生成指定随机字符串的简单实现方法
  5. php 月份查询生日_PHP----------php根据生日(时间戳)计算星座
  6. Lesson 2 Create First Qt Program
  7. mysql 命令大小写_MySQL连接方式及大小写问题
  8. python卸载干净_Python卸载不干净?Mac完全卸载python方法
  9. 【Python数据分析】数据预处理1——数据清洗
  10. 机器学习常见算法优缺点汇总