• 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 }
  • 相关阅读:
    [译]Vulkan教程(09)窗口表面
    [译]Vulkan教程(08)逻辑设备和队列
    [译]Vulkan教程(07)物理设备和队列家族
    Linux命令行文本工具
    go语言周边
    go第三方常用包
    Centos6安装gcc4.8及以上版本
    pyenv设置python多版本环境
    Redis慢日志
    PHP-CPP开发扩展(七)
  • 原文地址:https://www.cnblogs.com/buerjiongjiong/p/4731080.html
Copyright © 2020-2023  润新知