`
aksoft
  • 浏览: 44051 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

As3.0 删除容器所有子对象

    博客分类:
  • AS3
阅读更多
经过查询了资料发现了删除容器的所有子对象也有这样的学问啊。原来是关于深度的问题,每删除一个子对象

,深度就会自动移动并填充这个空位。

每个DisplayObjectContainer对象都有一个numChildren属性,numChildren记录了这个对象里子对象的个数,当

容器对象里添加了一个子对象,位置为0,numChildren为1,添加第二个子对象时,位置为1,numChildren为2,

以此类推。

    要删除容器对象里的子对象,可以用removeChild(parm1)和removeChildAt(parm2),其中parm1表示的是一个

显示对象的引用,parm2则是显示对象的位置,可以理解为层次(相当于As2中的层的概念吧)。用上面两种方法

还没有达到真正删除子对象的目的,它们只是让显示对象不在显示列表里,要从内存中删除还需将子对象的引用

设为null。

    当一个子对象被移除,比它高位置的子对象就自动下移一位。如某容器里有3个子对象,它们在0,1和2位置

,当0位置的子对象被移除,则其他位置的子对象的位置自动减1,所以要删除容器里所有子对象可以有两种方法

:  1  总是移除位置0处的对象

   2  移除最上面的对象;

具体算法如下:

public function removeAllChildren(container:DisplayObjectContainer):void {

   var count:int = container.numChildren;

   for (var i:int = 0; i<count; i++) {

    removeChildAt(0);

   }

  }
文章来源:http://space.flash8.net/space/html/70/628770_itemid_412075.html  

同样下面一篇是黑羽写的:容器中的子显示对象分为两类:

处于显示列表中的子显示对象。被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.kingda.org/archives/kingda/2007/08/as303.html

总结:

这里我只是作为对比:两篇博文都说种了一个特点,就是关于删除容器的所有子对象

这里的应用可以是当我们做游戏的时候,复制了很多影片剪辑。那么在游戏结束的时候

为了能够删除所有子对象释放内存,那么我们可以使用到removeAllChildren()这个

自定义的函数删除我们所有的对象。



像:这里我做的砖块,我复制了18x6个对象。但我希望用一种方法删除我所有的对象

那么调用的方法就是我们自定义的方法removeAllChildren();

参数填写为:
removeAllChildren(brick.parent);
也就是对象的父级别,包含了他的的容器

好,这个对比已经很清楚了。在游戏设计中,经常要使用到这个手段。

好,笔记记录完毕!时间是15:26分2008年7月10日

public function init():void {

   for (i=0; i<18; i++) {

    for (j=0; j<6; j++) {

     brick=new mc();

     addChild(brick);

     brick.x=i*30;

     brick.y=j*10;

     brick.name="brick"+i+j;

     trace(brick.name);

     brick.addEventListener(Event.ENTER_FRAME,hitonEnterFrame);

    }

   }


分享到:
评论

相关推荐

    as3.0编程手册.pdf

    本手册为在 ActionScript™ 3.0 中开发应用程序提供了基础。为了充分理解所介绍的理念和 技巧,您应已熟悉了一般的编程概念,如数据类型、变量、循环和函数。您还应了解面向对 象编程的基本概念,如类和继承。如果...

    【AS3.0教程爽快使用XML】

    为什么放弃AS2.0选择AS3.0?如果只允许我说三个理由。那么AS3.0对XML的近乎完美的支持绝对是其中一个。 简单说说AS3.0中对于...你会发现AS3.0中对于XML的操作犹如对一个普通Object对象一样浅显易懂。语句非常浅白流畅。

    Flash as3.0详细教程

    适于初学者的as3.0教程 编程基础 .23 计算机程序的用途 .23 变量和常量.24 数据类型. .25 处理对象 .26 属性 .26 方法. 27 事件.28 基本事件处理 .28 了解事件处理过程 .29 事件处理示例 .33 创建对象实例..33 常用...

    AS3.0 TLFTextField 组件库

    AS3.0 TLFTextField 最新的组件库 以往的有BUG,这个可是最新的哦 package { import fl.controls.UIScrollBar; import fl.text.TLFTextField; import flash.events.Event; import flashx.textLayout....

    AS3.0中文帮助文档 .chm

    ActionScript3.0是adobe公司推出的面向对象的flash编程语言,非常适合有java,C++,C#等程序员学习并转向基于flash的RIA应用开发,本中文帮助将有助于更高效的了解AS3的核心API。

    坦克大战 as3.0源码

    面向对象的入门级程序源码,as3.0的基础,

    塔防游戏程序(as3.0源码)

    简单的塔防as3.0程序,涉及简单的A*寻路算法,适合初学者,尤其对面向对象不熟悉的朋友更有帮助

    Flash as3.0 教程ppt

    ActionScript最初是由Macromedia(现已被Adobe收购)为其Flash产品开发的一种简单脚本语言,现在最新版本为3.0(简称AS3),已经成为一种完全面向对象(OOP)的编程语言。 ActionScript是一种基于ECMAScript的脚本...

    AS3.0语言在Flash编程中的应用

    摘要 1、绪论 1、flash概叙 2、Flash相关技术介绍... 3、在AS3中改变对象的位置和缩放对象 4、演示 3、XML的运用 1、新建FLASH 2、创建 viewer.as 的类 3、创建pics,xml 的文件 4、总结 5、致谢 6、参考文献

    DNP3.0的对象库.pdf

    DNP3.0的对象库,关于DNP3.0的对象库的详细说明。

    AS 3.0设计模式

    设计模式讲解 面向对象,设计模式的好处,创建模式,结构模式,行为模式,多种设计模式等等丰富内容

    as3.0 图片保存类 JPEGEncoder类

    通过JPEGEncoder类将ByteArray对象保存成图片

    as3.0 cookbook 完整版

    第一章 ActionScript语言基础 第二章 自定义类 第三章 运行时环境 ...第六章 可视化对象列表 第七章 绘图和遮罩 第八章 位图 第九章 文本 第十章 滤镜和转换 第十一章 动画编程 第十二章 字符串 。。。

    flash as3.0 基本应用

    Flash Player API 是指 Flash 包中的所有包、类、函数、属性、常量、事件和错误。Flash Player API 是 Flash Player 所特有的,这与基于 ECMAScript 的顶级类(如 Date、Math 和 XML)或语言元素相反。Flash Player ...

    ActionScript 3.0基础教程

    flash的AS3.0是面向对象式的编程语言,类似javascript,更强大和通用。

    基于actionscript3.0的打字游戏

    这是一个小程序,用来学习AS3.0,里面包括元件交互,基本数据,面向对象,简单数据结构,以及movieclip, sprite,和一些组件的应用,用它可以辅助学习AS3.0,也是我实验课上的一个作业.我的代码都很简单明了,一下子就难看懂,...

    黑羽as3教程(txt)

    你会发现AS3.0中对于XML的操作犹如对一个普通Object对象一样浅显易懂。语句非常浅白流畅。 2. 连续性。其各个功能的设计和AS3.0其余的部分思想一致,易于理解。 3. 熟悉。操作符和操作逻辑对我们来说都相当熟悉易用...

    ActionScript 3.0开发技术大全(第一部分)

    第2篇 ActionScript3.0面向对象特性  第4章 ActionScript3.0面向对象编程  第5章 ActionScript3.0中的String对象  第6章 ActionScript3.0中的Array类型  第7章 ActionScript3.0中的日期和时间  第8章 ...

    居于网格的碰撞检测实例(as3.0代码实现)

    这是居于网格的碰撞检测实例代码,实用于大量的对象处理碰撞的情况,当然我还会上传在项目中的实际应用的demo,请关注我的博客http://blog.csdn.net/lbq09047128

Global site tag (gtag.js) - Google Analytics