用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: ...
随机推荐
- bootstrap table笔记
获取选中行:$table.bootstrapTable('getSelections');
- Problem D Ananagrams(map的使用)
题目链接:Problem D 题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另一个单词.在判断是否满足条件时,字母不区分大小写. 但是输出时应保留原始大小写, ...
- POJ 3630 Phone List(trie树的简单应用)
题目链接:http://poj.org/problem?id=3630 题意:给你多个字符串,如果其中任意两个字符串满足一个是另一个的前缀,那么输出NO,否则输出YES 思路:简单的trie树应用,插 ...
- BZOJ 2096: [Poi2010]Pilots( set )
用个set维护就可以水过去...O(NlogN) 应该可以用单调队列O(N).... --------------------------------------------------------- ...
- struts的MVC详细实现
struts中核心类:ActionServlet,其中最主要的操作是RequestProcessor类中的process方法. struts实现mvc的详解图如下: 1.Tomcat一启动,根据web ...
- ID卡
ID卡全称为身份识别卡(Identification Card),是一种不可写入的感应卡,含固定的编号,主要有台湾SYRIS的EM格式.美国HIDMOTOROLA等各类ID卡.ID卡与磁卡一样,都仅仅 ...
- Qt 设置背景图片3种方法(QPalette可以做无数的事情,一旦控件指定了调色板,就要乖乖听它的话;QPainter当场绘制当然也没有问题,还有就是QSS)
方法1. setStylSheet{"QDialog{background-image:url()"}} //使用styleSheet 这种方法的好处是继承它的dialog都会自 ...
- FormView分页显示数据的例子
%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FormView控件.aspx.cs ...
- installation - How to install Synaptic Package Manager? - Ask Ubuntu
installation - How to install Synaptic Package Manager? - Ask Ubuntu How to install Synaptic Package ...
- Jedis中的一致性hash
Jedis中的一致性hash 本文仅供大家参考,不保证正确性,有问题请及时指出 一致性hash就不多说了,网上有很多说的很好的文章,这里说说Jedis中的Shard是如何使用一致性hash的,也为大家 ...