- 浏览: 49611 次
- 性别:
- 来自: 上海
文章分类
在AS3里..我们无法手动完全删除一个对象,,
以MovieClip为例..
我们只有在删除它的时候
除了removeChild(对象)外
还必须清空它的子对象
删除所有动态添加的属性
删除所有侦听
删除所有引用
然后等待垃圾回收,
可是实际操作的时候..
在长长的代码当中..经常会忘记自己什么时候写了侦听..什么时候添加了动态属性
其实,,我们可以借用显示对象中的Event.REMOVED,在删除对象的时候,让对象自己调用删除函数,删除相关的东西
下面这个类继承了MovieClip,当他的实例在removeChild的时候,对象将"自我毁灭" <视频教程'>css.shtml' target='_blank' title = 'div视频教程'>div class="code">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了..
以MovieClip为例..
我们只有在删除它的时候
除了removeChild(对象)外
还必须清空它的子对象
删除所有动态添加的属性
删除所有侦听
删除所有引用
然后等待垃圾回收,
可是实际操作的时候..
在长长的代码当中..经常会忘记自己什么时候写了侦听..什么时候添加了动态属性
其实,,我们可以借用显示对象中的Event.REMOVED,在删除对象的时候,让对象自己调用删除函数,删除相关的东西
下面这个类继承了MovieClip,当他的实例在removeChild的时候,对象将"自我毁灭" <视频教程'>css.shtml' target='_blank' title = 'div视频教程'>div class="code">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了..
发表评论
-
打开qq聊天面板
2012-07-18 00:40 0btn.addEventListener(MouseEvent ... -
帧播放完毕后 自动关闭 flash 播放器
2012-06-13 14:51 1008fscommand("quit", &qu ... -
as3 打开QQ聊天框
2012-04-10 03:03 923as3 打开QQ聊天框 作者:6dn 日期:2011-10- ... -
AS3动画效果公式,常用处理公式代码,基本运动公式,三角公式
2012-04-01 13:40 0as3种常见的弹性效果公式以及波形运动等as3动画效果公式代码 ... -
随机生成不同的数组
2012-03-29 15:14 836function RandomArray(n:int):Arr ... -
一些AS3中常用到的公式
2012-03-19 14:32 717基本三角函数的计算: 角的正弦值 = 对边 / 斜边 角的 ... -
图片循环滚动
2012-02-20 16:23 847//当第一张图片上移至看不到的位置时,删除该图片,并将该图片排 ... -
Flex代码格式化工具
2011-12-21 13:32 705Flex代码格式化工具 Flexformatter插件 安装与 ... -
字符串排序
2011-12-08 01:38 894var str1:String="很长很长的文本.. ... -
AS3: Dictionary Object
2011-11-24 19:48 1333// Arrays use numeric indexes: ... -
视 频
2011-11-09 21:16 664//创建一个 NetConnection 对象 002 var ... -
flashdevelop平台-搭建-配置
2011-11-09 20:43 634http://qilei.org/200810/flashde ... -
遍历 XML 结构
2011-11-09 20:23 611遍历 XML 结构 目录 [隐藏] 访问父节点和子节点 访 ... -
ActionScript 3.0基础提高——上篇
2011-11-07 22:52 597我一直非常重视ActionScri ... -
xml 格式
2011-11-07 22:50 636<?xml version="1.0" ... -
加载 xml 清除 空格什么的方法
2011-11-03 11:15 613var str2:String=str.replace(/\s ... -
AS3如何加载自身SWF
2011-11-01 13:26 772AS3如何加载自身SWF 分类: ActionScript3. ... -
加载很多图片
2011-10-24 00:41 575这几天做一个图片加载的程序,出现了点问题,主要是图片的 ... -
a.swf与加载的swf的通讯方法(as3.0)
2011-10-13 23:08 777a.swf加载b.swf, 在b.swf中使用a.swf的方法 ... -
MapDemo 人物移动(二)
2011-10-07 19:52 0上篇提到了人物的创建和人物行走的动画原理,这回我们看看人物的 ...
相关推荐
在日常工作中,我们经常需要处理大量的Excel文件,有时候这些文件中包含了许多不必要的文本或控件对象,例如文本框、形状、按钮等,这些对象可能会占用较大的文件空间或者影响到数据处理的效率。因此,学会如何批量...
8 6、为View Composer创建一个QuickPrep账户的步骤 ................................................... 8 7、登录到虚拟桌面时,提示“Login in as current user”选项失败 ......................................
这个“Excel-VBA宏编程实例源代码-随机删除应用对象设置.zip”文件提供了一个具体的应用实例,主要涉及到如何使用VBA宏来实现随机删除应用对象,如工作表、图表或者其他自定义对象。以下将详细介绍这一知识点。 ...
在AS3中,我们可以创建一个自定义的粒子类,并在`FlameEffect`类中管理这些粒子。 ```actionscript class FlameParticle { // 定义粒子的属性,如位置、速度、颜色等 } // 在FlameEffect类中添加粒子生成和更新的...
3. **事件模型**:AS 3.0 提供了一个新的事件驱动模型,允许程序对用户交互或其他系统事件做出响应。事件监听器和事件对象是这个模型的核心组成部分。 4. **数据类型系统**:AS 3.0 强制类型,包括基本类型(如int...
`<selectKey>`标签允许我们执行一个SQL查询,如`SELECT @@IDENTITY AS ID`,该查询返回刚刚插入记录的自增ID。`keyProperty`属性指定的是User对象中的属性名(如`id`),在插入操作完成后,`insert`方法的返回值和...
3. **单元格对象(Range)**:在工作表中,我们可以操作单个单元格或单元格范围。范围对象有值、公式、字体、边框等属性,以及清除、填充、查找等功能: ```vba Dim rng As Range Set rng = ws.Range("A1:C5") ' ...
在Python中,我们可以使用内置的`open()`函数打开文件,并使用`readlines()`方法读取文件内容为一个行列表。然后,我们可以通过遍历这个列表,检查每一行是否为空行,如果为空则忽略,否则保留。以下是一个基本的...
通过上述步骤,你可以创建一个在普通用户权限下难以删除或重命名的文件夹。然而,完全防止管理员删除或重命名文件夹在大多数情况下是不现实的,因为管理员通常拥有对系统的最高控制权。在编写这类程序时,应确保符合...
在Visual Basic中,可以通过调用`OSfCreateShellLink`函数来创建一个快捷方式。这个函数定义在Vb5stkit.dll库中,并提供了详细的参数说明: ```vb Private Declare Function OSfCreateShellLink Lib "Vb5stkit.dll...
在IT行业中,Amazon Web Services (AWS) 提供了一系列强大的云服务,其中Amazon Simple Storage Service (S3) 是一个高度可扩展的对象存储服务。为了更好地管理和操作S3中的数据,开发人员常常需要利用各种工具来...
在AutoCAD中,选择集是一个对象,它包含用户或程序选择的图形对象。你可以将它想象为一个临时存储选定图元的容器。通过编程,我们可以对选择集进行操作,如添加、删除图元,或者应用特定的属性修改。 要手动添加...
手动删除每个幻灯片上的动画效果确实耗时,不过通过使用VBA(Visual Basic for Applications)编程,我们可以实现一键删除所有动画。以下是两种方法来一次性删除PPT中的所有动画效果。 ### 方法一:使用VBA宏 1. *...
这段代码首先定义了一个工作表对象`ws`和一个范围对象`rng`,然后遍历当前工作簿中的每一个工作表。`UsedRange`属性返回工作表中包含数据的单元格范围。接着,代码通过`For Each`循环遍历这个范围内所有的超链接,并...
- **初始化**:首先定义了一个变量`i`用于存储遍历到的每个段落对象,以及一个整型变量`n`用于统计删除的空行数。 - **禁用屏幕更新**:通过设置`Application.ScreenUpdating`属性为`False`来提高宏执行速度,避免...
要删除一个命令行控制项,我们首先需要引用工作表对象和相应的控件对象。以下是一个简单的VBA代码示例,展示了如何删除一个名为"DeleteMe"的命令按钮: ```vba Sub DeleteButton() Dim ws As Worksheet Set ws = ...
如果模块不存在,它会弹出一个信息框告知用户。 在实际应用中,可能需要根据具体需求调整代码,例如删除特定的子过程或函数,或者根据某种条件保留部分代码。了解这些基本操作后,你就可以更深入地探索VBA宏编程,...
这个压缩包包含了一个名为"删除相同路径下的文件夹.xlsm"的文件,这实际上是一个启用宏的工作簿,用于执行自定义的VBA(Visual Basic for Applications)代码来实现特定功能。 VBA是Microsoft Office套件中内嵌的一...
在Excel VBA编程中,"VBA删除数据保留公式"是一个常见的需求,特别是在处理大量数据时,为了优化工作表或清理特定数据集,我们可能需要删除某些行或列,但同时要保持原位置的公式不被破坏。这个过程涉及到VBA...