`

让对象removeChild时自动删除子对象/属性/侦听(as3.0)

 
阅读更多
让对象removeChild时自动删除子对象/属性/侦听(as3.0)
在AS3里..我们无法手动完全删除一个对象,,
以MovieClip为例..
我们只有在删除它的时候
除了removeChild(对象)外
还必须清空它的子对象
删除所有动态添加的属性
删除所有侦听
删除所有引用
然后等待垃圾回收,
可是实际操作的时候..
在长长的代码当中..经常会忘记自己什么时候写了侦听..什么时候添加了动态属性
其实,,我们可以借用显示对象中的Event.REMOVED,在删除对象的时候,让对象自己调用删除函数,删除相关的东西
下面这个类继承了MovieClip,当他的实例在removeChild的时候,对象将"自我毁灭"
package net.L4cd.display{
  import flash.display.MovieClip;
  import flash.events.Event;
  dynamic public class iMovieClip extends MovieClip{
    private var lis:Array;//定义一数组保存侦听
    public function iMovieClip(){
      lis = new Array()
      addEventListener(Event.REMOVED,remove)//侦听删除事件
    }
   
    //重写addEventListener,在增加侦听的时候..把相应的事件保存到数组
    override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
      lis.push([type,listener,useCapture])
      super.addEventListener(type,listener,useCapture,priority,useWeakReference)
    }
   
    //"自我毁灭"的方法
    private function remove(e:Event):void{
      if(e.currentTarget != e.target)return
      stop()
      //删除子对象
      trace("删除前有子对象",numChildren)
      while(numChildren > 0){
        removeChildAt(0)
      }
      trace("删除后有子对象",numChildren)
     
      //删除动态属性
      for(var k:String in this){
        trace("删除属性",k)
        delete this[k]
      }
     
      //删除侦听
      for(var i:uint=0;i<lis.length;i++){
        trace("删除Listener",lis[i][0])
        removeEventListener(lis[i][0],lis[i][1],lis[i][2])
      }
      lis = null
    }
  }
}
然后我们另外新建一个flash,直接在时间轴上写下以下代码
import net.L4cd.display.iMovieClip;
var mc:MovieClip = new iMovieClip()
mc.addEventListener(Event.ADDED,aaaa)
mc.addEventListener(Event.ADDED_TO_STAGE,aaaa)
mc.addEventListener(Event.ENTER_FRAME,aaaa)
mc.addEventListener(MouseEvent.CLICK,aaaa)
mc.addEventListener(MouseEvent.MOUSE_DOWN,aaaa)
mc.a = "http://L4cd.Net"
mc.b = "我是动态属性2"
mc.name = "我是MC"
addChild(mc)
function aaaa(e:Event){
 
}
removeChild(mc)
mc = null
运行后.,,输出框就会出现
删除前有子对象 0
删除后有子对象 0
删除属性 b
删除属性 a
删除Listener removed
删除Listener added
删除Listener addedToStage
删除Listener enterFrame
删除Listener click
删除Listener mouseDown
这样,,,我们能做的事都已经做完了..等垃圾回收进行回收就ok了
上面的remove方法就是mc在移除的时候,对自己进行的清理,,
注意的是,以上只针对MovieClip进行的清理,每个类或你自定义的类都有不同..
如Sprite不需用要stop(),不需要删除动态属性..等等..
这个就由你自己去发挥~
写一组自己的"自我毁灭"类..
还有需要注意的是..像有时候,你只想removeChild,而不想进行删除,这样可以把上面的代码进行修改.
把remove设置为公开的方法
然后把addEventListener(Event.REMOVED,remove)去掉..
最后在你想删除对象的时候,,,再调用remove()就ok了..
分享到:
评论

相关推荐

    AS3.0基础教程.zip

    AS3.0(ActionScript 3.0)是Adobe Flash平台上的主要编程语言,用于创建交互式内容、游戏和富互联网应用程序(RIA)。这个“AS3.0基础教程.zip”压缩包显然是一份针对初学者的教程资料,旨在帮助新接触AS3.0的人...

    as3.0各种编程

    根据提供的文件信息,我们可以归纳出一系列与AS3.0(ActionScript 3.0)相关的编程知识点。ActionScript 3.0 是一种广泛应用于Flash开发中的脚本语言,用于创建交互式应用程序、游戏以及动画等内容。以下是基于标题...

    Flash_AS3.0例子

    11. **影片剪辑控制**:通过 addChild 和 removeChild 操作影片剪辑,实现动态内容的添加和删除,理解显示对象的层次关系。 12. **动作脚本类库**:了解并使用预定义的类库,如Math、Date等,增强代码的复用性和可...

    as3.0滚动菜单

    在AS3.0(ActionScript 3.0)中,这种滚动菜单能够实现动态滚动效果,同时具备暂停功能,即当鼠标悬停在菜单按钮上时,滚动会暂停,提供更友好的用户体验。 ActionScript 3.0是Flash平台的核心脚本语言,相比于早期...

    简易涂鸦板 Flash AS3.0

    【简易涂鸦板 Flash AS3.0】是一个使用ActionScript 3.0编程语言在Adobe Flash环境中创建的交互式应用程序。ActionScript 3.0是Flash平台的核心,它提供了更高效、更强大的性能和功能,使得开发动画、游戏以及交互式...

    AS3.0制作的生日蛋糕

    《AS3.0编程技术在生日蛋糕动画中的应用解析》 在数字艺术和互动媒体领域,ActionScript(AS)作为一种强大的脚本语言,被广泛应用于Flash动画和游戏的开发。AS3.0作为其最新版本,引入了许多重要的改进,提高了...

    Flash as3.0制作的泡泡猫小游戏源码。

    《深入解析AS3.0:基于“泡泡猫”小游戏的编程实践》 在IT行业中,游戏开发是一项富有挑战性且充满创造力的工作。ActionScript 3.0(简称AS3.0)作为Adobe Flash的主要编程语言,被广泛应用于交互式内容和游戏的...

    flash as3.0代码优化

    在探讨“Flash AS3.0代码优化”这一主题时,我们深入分析了如何提升Flash应用程序的性能,确保其运行更加流畅、高效。以下是从给定文件的标题、描述、标签和部分内容中提炼出的关键知识点: ### 1. DisplayObject ...

    ActionScript 3.0 编程(PDF)

    1. 类与对象:AS3.0 是一种完全的面向对象语言,支持类的定义、继承、封装和多态。通过 `class` 关键字定义类,使用 `new` 关键字实例化对象。 2. 访问修饰符:AS3.0 提供了 `public`, `private`, `protected`, `...

    用AS3加载外部SWF文件

    最后,关于删除问题,AS3中的垃圾回收机制通常会自动处理不再引用的对象。然而,为确保释放资源,可以像上面那样使用`unloadAndStop()`方法,并在不再需要时将引用设置为null。 在提供的文件列表中,我们有多个SWF...

    可爱战机.fal

    { //删除key对象 delete key[event.keyCode]; //设置变量值 bool = true; //主角恢复到水平飞行状态 Role.gotoAndStop(13); } //舞台帧频事件响应函数 private function roleMove(event:...

    ActionScript3.0基础

    AS3.0全面支持面向对象编程(OOP),包括类、对象、封装、继承和多态等概念。通过类定义对象的结构和行为,使用构造函数初始化对象,通过继承实现代码复用,通过多态提供灵活性。 四、事件驱动编程 AS3.0采用事件...

    actionscript3.0 动画初级教程

    - 属性 `x`, `y` 控制对象位置,`rotation` 和 `scaleX/scaleY` 调整旋转和缩放。 7. **声音和视频处理** - AS3.0 提供了处理音频和视频的能力,如播放、暂停、停止和控制音量。 - `Sound` 类用于加载和播放音频...

    动态操作dom

    动态操作dom方法文/1、document.createElement() 动态创建一个元素标签... //6、cloneNode:复制一个节点 true-&gt;把当前元素和它的子元素都克隆一份 false-&gt;只把当前的元素克隆,子元素不管 // curEle.cloneNode(true);档

    FLASH CS4 AS3 各式各样的下拉菜单

    在Flash CS4中,ActionScript 3.0(AS3)是主要的编程语言,用于创建交互式的动画、游戏和应用程序。下拉菜单是网页和应用程序界面中的常见元素,它提供了一种有效的方式来组织和展示大量的选项。这篇教程将深入探讨...

    AS3培训-游戏背包系统工程源码

    AS3培训-游戏背包系统工程源码是一个专为AS3初学者设计的教程资源,旨在帮助他们理解并实现游戏中的核心功能——背包系统。这个系统是游戏开发中的关键部分,它允许玩家收集、管理和使用各种游戏道具。让我们深入...

    AS3+xml下拉菜单_下拉弹出框菜单

    在创建下拉菜单时,AS3.0的事件监听、类继承和对象实例化等功能是至关重要的。例如,你可以创建一个基类`MenuBase`,然后继承这个基类来实现具体的下拉菜单和弹出框菜单类。 2. **XML的数据绑定**: XML用于存储...

    as3简易打地鼠

    《AS3简易打地鼠游戏开发详解》 在IT行业中,游戏开发是一项充满创意和技术挑战的任务,而“打地鼠”作为一个经典的休闲游戏,经常被用作初学者学习编程和游戏设计的入门项目。本篇将详细介绍如何使用AS3...

    初学者适用的AS3基础教程

    理解这些类及其属性(如x、y坐标、width、height等)和方法(如addChild、removeChild等)对于制作动态内容至关重要。 6. **图形绘制**:使用Graphics类,你可以直接在舞台上绘制线条、形状和填充。这对于创建...

    Ajax基本对象的属性和方法

    8. &lt;element&gt;.removeChild(childNode):这个方法从元素中删除子元素 childNode。 9. &lt;element&gt;.replaceChild(newNode, oldNode):这个方法将节点 newNode 替换为 oldNode。 10. &lt;element&gt;.hasChildnodes():这个方法...

Global site tag (gtag.js) - Google Analytics