zoukankan      html  css  js  c++  java
  • 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中,组件是否被禁用,跟组件是否能响应事件完全是没有任何关联的!)

    测试代码:

     1 var _sprite:Sprite = new Sprite();
     2 _sprite.graphics.lineStyle(1,0);
     3 _sprite.graphics.beginFill(0xff0000);
     4 _sprite.graphics.drawCircle(0,0,50);
     5 _sprite.graphics.endFill();
     6  
     7 _sprite.addEventListener(Event.ENTER_FRAME,onSpriteEnterFrame);//实际上:程序执行到这里就会一直不停的跑onSpriteEnterFrame了
     8  
     9 function onSpriteEnterFrame(e:Event):void{
    10     trace("我是_Sprite",getTimer());
    11 }
    12  
    13 addChild(_sprite);
    14 _sprite.x = stage.stageWidth/2 ;
    15 _sprite.y = stage.stageHeight/2 ;
    16  
    17 _sprite.addEventListener(MouseEvent.CLICK,onSpriteMouseClick);
    18  
    19 function onSpriteMouseClick(e:MouseEvent):void{
    20     removeChild(_sprite);//移除自己 
    21     _sprite=null;//注意:即使把自身设置为null,原来注册的onSpriteEnterFrame函数仍会一直执行,正确的方法只能用removeEventListener才能移除Enter_Frame事件
    22     //_sprite.removeEventListener(Event.ENTER_FRAME,onSpriteEnterFrame);
    23 }
  • 相关阅读:
    五、Docker网络管理
    四、Docker存储管理
    三、Docker镜像基础管理
    二、Docker容器基础管理
    模仿DotnetCore中间件的方式,做一个列表过滤的功能
    web开发常见的鉴权方式
    Go语言使用Godep进行包管理
    Go语言中的数据格式(json、xml 、msgpack、protobuf)
    epoll原理解释(转)
    内存管理之内存池概述(转)
  • 原文地址:https://www.cnblogs.com/buerjiongjiong/p/4731080.html
Copyright © 2011-2022 走看看