AS3初学者容易迷糊的几个问题
1.Sprite/MovieClip的Enter_Frame事件,不受addChild/removeChild影响
简单点讲:Sprite或MovieClip对象一旦为其添加了Enter_Frame事件监听,对应的Enter_Frame处理函数将会马上被调用,并一直执行下去(不管你是否将其addChild到显示列表,或者将其从显示列表removeChild),直到该对象removeEventListener相应的监听器为止。
同样:MovieClip一旦被new出来,就会自动播放(在未用任何代码stop()的前提下),不管你是否将其addChild或removeChild
注:其它事件也类似,在AS3的世界中,事件一旦被监听,要想停止事件响应,唯一的方法只能是removeEventListener。(这一点跟c#中完全不同,在c#中不管是webform还是winform,一旦按钮被disabled了,肯定就无法触发按钮的Click事件,但在AS3中,组件是否被禁用,跟组件是否能响应事件完全是没有任何关联的!)
测试代码:
var _sprite:Sprite = new Sprite(); _sprite.graphics.lineStyle(1,0); _sprite.graphics.beginFill(0xff0000); _sprite.graphics.drawCircle(0,0,50); _sprite.graphics.endFill();_sprite.addEventListener(Event.ENTER_FRAME,onSpriteEnterFrame);//实际上:程序执行到这里就会一直不停的跑onSpriteEnterFrame了function onSpriteEnterFrame(e:Event):void{trace("我是_Sprite",getTimer()); }addChild(_sprite); _sprite.x = stage.stageWidth/2 ; _sprite.y = stage.stageHeight/2 ;_sprite.addEventListener(MouseEvent.CLICK,onSpriteMouseClick);function onSpriteMouseClick(e:MouseEvent):void{removeChild(_sprite);//移除自己 _sprite=null;//注意:即使把自身设置为null,原来注册的onSpriteEnterFrame函数仍会一直执行,正确的方法只能用removeEventListener才能移除Enter_Frame事件//_sprite.removeEventListener(Event.ENTER_FRAME,onSpriteEnterFrame); }
2.ADDED、ADDED_TO_STAGE、REMOVED、REMOVED_FROM_STAGE这几个事件的区别
var _container:Sprite = new Sprite();_container.addEventListener(Event.ADDED,onAdded); _container.addEventListener(Event.ADDED_TO_STAGE,onAddedToStage); _container.addEventListener(Event.REMOVED,onRemoved); _container.addEventListener(Event.REMOVED_FROM_STAGE,onRemovedFromStage);function onAdded(e:Event):void {trace("onAdded:",e); }function onAddedToStage(e:Event):void {trace("onAddedToStage:",e); }function onRemoved(e:Event):void {trace("onRemoved:",e); }function onRemovedFromStage(e:Event):void {trace("onRemovedFromStage:",e); }addChild(_container); //onAdded: [Event type="added" bubbles=true cancelable=false eventPhase=2] //onAddedToStage: [Event type="addedToStage" bubbles=false cancelable=false eventPhase=2]var _sub:Sprite = new Sprite();_container.addChild(_sub); //onAdded: [Event type="added" bubbles=true cancelable=false eventPhase=3]/*_container.removeChild(_sub); //onRemoved: [Event type="removed" bubbles=true cancelable=false eventPhase=3]*/removeChild(_container); //onRemoved: [Event type="removed" bubbles=true cancelable=false eventPhase=2] //onRemovedFromStage: [Event type="removedFromStage" bubbles=false cancelable=false eventPhase=2]_container.removeChild(_sub); //onRemoved: [Event type="removed" bubbles=true cancelable=false eventPhase=3]
区别:
ADDED是子对象被添加到自身时触发,ADDED_TO_STAGE是对象本身被添加到显示列表时触发;类似的:REMOVED当子对象从自身移除时触发,REMOVED_FROM_STAGE是自身从显示列表中移除时触发;
ADDED/REMOVED事件会冒泡,而ADDED_TO_STAGE/REMOVED_FROM_STAGE不冒泡,也就是说每次addChild或removeChild自身时,下面的ADDED/REMOVED事件也会冒泡上来先被触发,然后才触发ADDED_TO_STAGE/REMOVED_FROM_STAGE事件.
转载于:https://www.cnblogs.com/yjmyzz/archive/2010/07/06/1772458.html
AS3初学者容易迷糊的几个问题相关推荐
- 不能执行autowired_想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做...
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...
- php获取url文件大小,PHP通过URL获取文件大小
function getFileSize($url){ $url = parse_url($url); if($fp = @fsockopen($url['host'],empty($url['por ...
- 异常java.lang.Thread.dumpStack(Unknown Source)
转自: http://www.blogjava.net/landon/archive/2011/02/27/345265.html 昨天在公司写了一段代码,很简单,就是测试Thread的dumpSta ...
- C语言多维数组与多级指针
多维数组与多级指针也是初学者感觉迷糊的一个地方.超过二维的数组和超过二级的指针其实并不多用.如果能弄明白二维数组与二级指针,那二维以上的也不是什么问题了.所以本节重点讨论二维数组与二级指针. 一.二维 ...
- linux挂移动硬盘命令,linux挂载命令mount及U盘、移动硬盘的挂载
一.mount的命令格式是(注意mount只能在root权限下运行) mount dervice dir dervice是要挂载的设备,dir是挂载点 二.查看当前磁盘列表的设备 fdisk -l 显 ...
- 【UML】 用例粒度
前言: 刚刚接触uml的时候,这个粒度搞的我一脸懵逼,但是经过系统的学习,还是将其解决了!这块的知识属于uml用例图中的知识,所以在解释名词的时候都是以uml为根据的! 1.什么是用例 以前在学软件工 ...
- GMM-HMM kaldi 详解
虽然现在端到端语音识别模型可以直接对后验概率建模,可以不需要HMM结构了.但实际上目前很多state-of-the-art模型还是以HMM结构为主,比如chain model.而且掌握HMM-GMM结 ...
- C#接口作用的深入理解
原文出处: 指尖流淌-吴学雷 1.C#接口的作用 C# 接口是一个让很多C#初学者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口 ...
- AS3.0常用第三方类库:TweenMax
一,主要代码结构: com.greensock包里面,首先最主要的就是TweenMax.as:然后一个常用的是 com.greensock.easing.*;里面包含了15个缓动,下文再一一介绍:另外 ...
最新文章
- CountDownLatch实时通信
- Jupyter Notebook 快速入门(上)
- 【数据结构】排序算法及优化整理
- 处理ABAP Netweaver gateway service使用过程中遇到的400 error - invalid key predicate type for guid
- Spring BeanDefinition
- PAT乙级(1026 程序运行时间)
- 具有审计表的实体框架
- 计算机二级考试改错题技巧
- php观察者模式使用场景,php设计模式系列--观察者模式
- oracle 表复制 long,【学习笔记】Oracle数据库使用copy实现long类型转移表空间案例 ORA-00997...
- python读取文件夹下所有图像_Python 读取指定文件夹下的所有图像方法
- android彻底退出应用_Android完全退出应用程序的方法
- ERP的总体结构(ERP的工作原理1)-------(转)
- 3D人脸重建:《Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network》
- JSP概述——什么是JSP、JSP运行原理
- Windows上CLion配置和使用教程
- BBEdit的正则表达式语法
- 智哪儿高端建材市场调研:智能家居产品占几成?结果超出你的想象
- 文件与base64格式转换
- 【转载】使用JQDATA获取数据并本地化(Mysql储存)
热门文章
- java8-接口新特性
- 资源隔离之 Linux namespace
- Algorand 共识算法 BA* 入门
- [以太坊源代码分析] II. 数据的呈现和组织,缓存和更新
- 阿里云查看mysql是否安装_阿里云CentOS服务器mysql安装
- QThreadPool Class的翻译
- JAVA经过两轮面试还能被刷吗_云从科技JAVA开发工程师面试:视频进行面试,前两轮技术面试 - 职朋职业圈...
- 2019年, image captioning论文汇总
- C++三大继承构造函数的执行顺序详解
- POJ 2182 Lost Cows [树状数组+二分]