用AS3清空容器下所有子显示对象
容器中的子显示对象分为两类:
处于显示列表中的子显示对象。被numChildren所记录的。
由容器graphics对象绘制出来的矢量图。这个矢量图不属于Shape类型,不在容器的显示列表中,不被numChildren所记录。而是做为容器的背景矢量图存在,始终处于最后面。
因此,准确的说,如果要移除容器下所有子显示对象,就要分别移除这两类对象。
比如有一个容器,其下有8个sprite子对象,和一个graphics绘制出的图像:
var con:Sprite = new Sprite();
addChild(con);
for(var n:int =0; n<8; n++) {
con.addChild(new Sprite());
}
con.graphics.beginFill(0xFF0000);
con.graphics.drawCircle(100,100,100);
con.graphics.endFill();
trace ("con's children:" + con.numChildren);
//输出:con's children:8 graphics对象绘制的图形果然不在其中。
先说,如何移除显示列表中的显示对象。
在AS3中,容器对子对象的深度管理是自动的,深度是连续的。
每移除指定深度的显示对象,那么其他子显示对象会移动并填充这个空位。因此,代码编写需要注意这一点。
容易误写的移除代码:
//以下是错误代码1:
for(var i:int=0; i < con.numChildren; i++)
con.removeChildAt(i);
}
trace (con.numChildren); //输出:4
错误原因:每次删除1个子对象,后面的就填补上深度索引空缺,numChildren又会动态改变,因此出错。这样,实际只移除了四个显示对象,分别是0,2,4,6这四个索引的显示对象。因此,是错误的代码。
//以下是错误代码2:
for(var i:int=0; i < con.numChildren; i++)
con.removeChildAt(0);
}
trace (con.numChildren); //输出:4
错误原因:每次删除一个对象,虽然想每次删除第0层,后面的就填补上深度索引空缺,numChildren又会动态改变,当con.numChildren = 4时, i = 4,循环无法继续。
正确方式:
for(var i:int=con.numChildren-1; i>=0; i--) {
con.removeChildAt(0);
}
或:
var len:uint = con.numChildren;
while(len>0) {
con.removeChildAt(0);
len--;
}
由于显示列表会自动移动显示对象填充空缺,所以只移除0索引的位置即可。这样效率最高。
到这儿,大家可能会发现,虽然numChildren已经为0,但是graphics绘制的圆形仍然存在。所以最后,应当调用一句下面的代码把它也清除掉,才算真正的移除了容器下所有的显示内容。
con.graphics.clear();
用AS3清空容器下所有子显示对象的更多相关文章
- Egret --视觉编程,显示对象,事件
1,在egret中,视觉图形都是由显示对象和显示对象容器组成的: 显示对象:准确的说,就是在舞台上显示出来的,包括能真实看见的图形,文字,图片,视频等:也包括不能看见但真实存在的显示对象容器: 一:显 ...
- Erget 显示对象
核心显示类: 类 描述 DisplayObject 显示对象基类,所有显示对象均继承自此类 Bitmap 位图,用来显示图片 Shape 用来显示矢量图,可以使用其中的方法绘制矢量图形 TextFie ...
- 白鹭引擎 - 显示对象与 HelloWord ( 绘制了一个红蓝相间的 2 x 2 格子 )
1: 白鹭引擎默认实在一个 640 * 1136 的画布上作画 2: 入口文件 Main.ts, 类 Main 是程序的入口 // 1, 在一个宽高为 640 * 1136 的画布上作画 // 2, ...
- linux下history命令显示历史指令记录的使用方法
Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中.默认保存1000条,你也可以更改这个值 ...
- 转载网页博客:ie7bug:div容器下的img与div存在间隙
1.代码及在浏览器上的显示 ie7: ie8+: Firefox: Chrome: 可以看出ie7上在div容器下添加img,div与img中有间隙,而在ie8+和其他浏览器上均显示正常 网页源代码如 ...
- Dedecms判断当前栏目下是否有子栏目
使用dedecms建网站,有时为了某种功能的需要,需要通过代码判断当前栏目下是否有子栏目,如果有,显示一种样式,如果没有,显示另一种样式. dedecms判断当前栏目下是否有子栏目可使用以下的代码进行 ...
- iOS适配 旧项目工程在iOS9下不能正常显示
在iOS开发中,很多时候会用到旧项目,比如版本的升级.使用Demo等等, iOS SDK正在不断的升级,不断的升级给iOS开发带来了新的活力. 然而在iOS SDK新的版本出来之后,旧项目可能会出现新 ...
- 【Spring】非Spring IOC容器下获取Spring IOC上下文的环境
前言 在Spring Web项目中,有些特殊的时候需要在非Spring IOC容器下获取Spring IOC容器的上下文环境,比如获取某个bean. 版本说明 声明POM文件,指定需引入的JAR. & ...
- DOS下如何同时显示时区日期和时间
DOS下如何同时显示时区日期和时间 Echo %Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2% 不显示周几 Echo %Date: ...
随机推荐
- BestCoder Round #47
1001 Senior's Array 题目链接:1001 题意:给你一个长度为n的序列,你必须修改序列中的某个数为P,求修改后的最大连续子序列和. 思路:数据量比较小,可以直接暴力做, 枚举序列的每 ...
- C++对象模型--总结
http://c.biancheng.net/cpp/biancheng/view/239.html 博客园有关C++内存布局,对象模型的文章. Effective C++ 绝不重写non-virtu ...
- dubbo架构演变之路
背景 (#) 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时, ...
- Hibernate的搭建及使用
1.创建普通的java项目. 因为Hibernate是一个轻量级的框架,不像servlet,还必须需要tomcat的支持,Hibernate只要jdk支持即可. 2.引入jar包. 可以在项目中直接引 ...
- [LeetCode]题解(python):097-Interleaving String
题目来源: https://leetcode.com/problems/interleaving-string/ 题意分析: 给定字符串s1,s2,s3,判断s3是否由s1和s2穿插组成.如“abc” ...
- C-重定向
说实话,第一次接触重定向这一个概念,感觉是那么的神奇简洁不可思议…………………… freopen() 本来应该是打开的是文件指针,但是分配了指针,使她(亲切)指向了标准输入.输出.错误流. 用 法: ...
- Linux远程连接与常用命令
要学linux ,一定得用命令界面的,怎么也得是shell语言,用就最难最原始的,用的人都是专家,历史最少也得30年,不管有三七二十一上来就敲ls ,先看看当前目录都有什么.一口专业的linux范儿, ...
- cocos2d-x中的导演、场景、层和精灵
场景(Scenes) 场景在cocos2d-x中是CCScene类实现的,是应用程序流中独立的一部分.一个cocos2dx应用程序可以有许多场景,但是在某一时刻,只有一个场景在运行. 比如,你有一个游 ...
- C++模板:二分图匹配
int Dfs(int k){ for(int i=0;i<v[k].size();i++){ int a=v[k][i]; if(used[a]==0){ used[a]=1; if(link ...
- Home | WebScraping.com
Home | WebScraping.com We specialize in extracting data from websites, which is known as web scrapin ...