In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

クロージャ

クロージャでaddEventListenerしたEventをremove

クリックで動きます。
Get Adobe Flash player
by mr_elephant 30 Dec 2010
    Embed
package {
    import flash.filters.GlowFilter;
    import flash.geom.Point;
    import flash.events.Event;
    import flash.display.Shape;
    import flash.events.MouseEvent;
    import flash.display.Sprite;
    
    [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "000000")]

    public class Line extends Sprite {
        public function Line() {
            // write as3 code here..
            init();
        }
        
        private function init():void
        {
         stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
        }

        private function mouseDownHandler(e:MouseEvent):void
        {
         stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
         stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);   
        }
        
        private function mouseUpHandler(e:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
            stage.removeEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
        }

        private function mouseMoveHandler(e:MouseEvent):void
        {
            drawLines(mouseX,mouseY);
        }
        
        private function drawLines(startX:Number,startY:Number):void
        {
            var line:Shape = new Shape();
            var col:uint = Math.random() * 0xFFFFFF;
            var count:Number = 0;
            addChild(line);
            line.x = startX;
            line.y = startY;
            line.graphics.lineStyle(1,col);
            line.graphics.moveTo(20,0);
            line.addEventListener(Event.ENTER_FRAME,
                                function():void{
                                    count+= 0.1;
                                    var px:Number = 20 * (Math.cos(count) + count * Math.sin(count));
                                    var py:Number = 20 * (Math.sin(count) - count * Math.cos(count));
                                    line.graphics.lineTo(px,py);
                                    line.alpha -= 0.005;
                                    if(count > 10){
                                        removeChild(line);
                                        line.removeEventListener(Event.ENTER_FRAME,arguments.callee);
                                    }
            
            });
        }
    }
}