用AS3如何清空容器下所有子显示对象

转载 2007年09月12日 16:01:00

 用AS3如何移除容器下所有子显示对象



作者:kingda | 来源:http://www.kingda.org | 浏览次数:85 | 2007-8-11 17:57:31

容器中的子显示对象分为两类:

处于显示列表中的子显示对象。被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中,容器对子对象的深度管理是自动的,深度是连续的。
每移除指定深度的显示对象,那么其他子显示对象会移动并填充这个空位。因此,代码编写需要注意这一点。
容易误写的移除代码:


//以下是错误代码:
for(var i:int=0; i
 con.removeChildAt(i);
}
trace (con.numChildren); //输出:4


错误原因:每次删除1个子对象,后面的就填补上深度索引空缺,numChildren又会动态改变,因此出错。这样,实际只移除了四个显示对象,分别是0,2,4,6这四个索引的显示对象。因此,是错误的代码。
正确方式:


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();
此信息来自〖闪无忧〗
查看原网址:http://www.5uflash.com/Html/as3/175823966.html

用AS3清空容器下所有子显示对象

容器中的子显示对象分为两类: 处于显示列表中的子显示对象。被numChildren所记录的。 由容器graphics对象绘制出来的矢量图。这个矢量图不属于Shape类型,不在容器的显示列表中,不被...
  • MeetLunay
  • MeetLunay
  • 2013年11月27日 19:16
  • 1474

Flash AS3 清空显示对象容器中所有的对象

在Flash AS3清空显示对象容器(DisplayObjectContainer)中所有的对象(Child)的方法是很简单的,虽然AS3没有提供一个removeAllChild方法方便用户使用,但是...
  • yctccg
  • yctccg
  • 2016年08月16日 10:40
  • 854

AS3 显示对象容器

addChild和addChildAt的区别: 它们都是将一个 DisplayObject 子实例添加到该 DisplayObjectContainer 实例中。addChild:子项将被添加到该 ...
  • MeetLunay
  • MeetLunay
  • 2013年05月10日 18:22
  • 1437

AS3如何移除容器下所有子显示对象

容器中的子显示对象分为两类: 处于显示列表中的子显示对象。被numChildren所记录的。由容器graphics对象绘制出来的矢量图。这个矢量图不属于Shape类型,不在容器的显示列表中,不被num...
  • ecitnet
  • ecitnet
  • 2008年01月25日 10:43
  • 2099

as3中的容器

4种容器:Array;Object;Vector;Dictionary; 各自特点:Array是索引数组,虽然它也是动态类,可以等同于Object来用,但是不建议这样,因为没有任何好处。除了键上的区别...
  • jomoonrain2
  • jomoonrain2
  • 2011年05月08日 01:47
  • 982

控制unity对象下所有子物体的显示状态

Renderer[] rendererComponents = GetComponentsInChildren(true); Collider[] colliderCompon...
  • weiming8517
  • weiming8517
  • 2016年10月21日 10:23
  • 1074

Unity3D清除父物体下的所有子物体

子物体上的方法: public void blockDestroy() {     Destroy(gameobject);  }  在父物体上调用此方法 parentObj.Br...
  • htwzl
  • htwzl
  • 2017年10月27日 17:56
  • 247

Oracle中删除用户下所有对象的多种方法

Oracle中删除用户下所有对象的多种方法 Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面...
  • haiross
  • haiross
  • 2015年09月22日 13:12
  • 21746

oracle如何删除一个用户下的所有数据?

在oracle中,如何删除一个用户下的所有数据?     1、用sql*plus,或者在plsql、toad中使用sys身份登陆数据库        2、然后执行下面语句: DROP USER us...
  • skyvvs
  • skyvvs
  • 2013年08月27日 17:04
  • 788

Unity3D获取GameObject的所有子对象,添加特定标签

using System.Collections;using System.Collections.Generic; using UnityEngine; using UnityEditor; pu...
  • yaoyutian
  • yaoyutian
  • 2017年03月20日 12:38
  • 1176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 用AS3如何清空容器下所有子显示对象
举报原因:
原因补充:

(最多只允许输入30个字)