用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: ...
随机推荐
- UVa1368/ZOJ3132 DNA Consensus String
#include <stdio.h>#include <string.h> int main(){ int a[4][1000]; // A/C/G/T在每列中出现的次数 ...
- POJ 3461 Oulipo(模式串在主串中出现的次数)
题目链接:http://poj.org/problem?id=3461 题意:给你两个字符串word和text,求出word在text中出现的次数 思路:kmp算法的简单应用,遍历一遍text字符串即 ...
- BZOJ 1218: [HNOI2003]激光炸弹( 前缀和 + 枚举 )
虽然source写着dp , 而且很明显dp可以搞...但是数据不大 , 前缀和 + 枚举也水的过去..... -------------------------------------------- ...
- Oracle "Job定时"
今天需要做个定时器,定时到别的库导入数据用到了Job,第一次使用记录下来,如果有第一次操作的可以借鉴一下 1.首先,使用Toad新建job,进入配置页面
- [LeetCode]题解(python):123-Best Time to Buy and Sell Stock III
题目来源: https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/ 题意分析: 和上题类似,array[i]代表第i天物品 ...
- EventStore的设计思路
EventStore的设计思路 最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event ...
- word-break与word-wrap
本文列举了兼容 IE 和 FF 的换行 CSS 推荐样式,详细介绍了word-wrap同word-break的区别. 兼容 IE 和 FF 的换行 CSS 推荐样式 最好的方式是 以下是引用片段: ...
- [置顶] 基于.NET的快速信息化系统开发框架 — RDIFramework.NET — 系统目录
基于.NET的快速信息化系统开发整合框架 —RDIFramework.NET—系统目录 框架简单介绍 .NET快速开发整合框架(RDIFramework.NET),基于.NET的快速信息化系统开发.整 ...
- js和jQuery写简单下拉菜单
1.jQuery写法 <head> <meta http-equiv="Content-Type" content="text/html; charse ...
- MongoDB shell常用命令
Shell操作数据库: 1. 超级用户相关: 1. #进入数据库admin use admin 2. #增加或修改用户密码 db.addUser('name','pwd') 3. #查看用户列表 d ...