forked from: 錯視 (Performance Improved!?)

by nitoyon forked from forked from: 錯視 (Fixed exception) (diff: 72)
パフォーマンス向上のために、addEventListener を
1つにまとめてみた。多少改善?
-------------------------------------------------------
渦巻きに見える
♥0 | Line 69 | Modified 2010-01-11 13:22:48 | MIT License
play

ActionScript3 source code

/**
 * Copyright nitoyon ( http://wonderfl.net/user/nitoyon )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/whRh
 */

// パフォーマンス向上のために、addEventListener を
// 1つにまとめてみた。多少改善?
//-------------------------------------------------------
// 渦巻きに見える
package {
    import flash.display.Graphics;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import net.hires.debug.Stats;    
    
    [SWF (width = 400, height = 400, backgroundColor = 0x808080)]
    public class FlashTest extends Sprite {
        private var _srcCircle:Shape;
        private var _canvas:Sprite;
        
        public function FlashTest() {
            addChild(new Stats());
            
            _canvas = new Sprite();
            addChild(_canvas);
            const size:int = stage.stageWidth;
            _canvas.x = size * 0.5;
            _canvas.y = size * 0.5;

            _srcCircle = new Shape();
            var t:Number = 0;
            var r:Number = size;
            var d:Number = 100;
            var pt:Point;
            var g:Graphics = _srcCircle.graphics;
            g.lineStyle(0, 0x000000, 0.0);
            var tmpPt:Point;
            var color:uint = 0x000000;
            var angle:Number = 0;
            var angled:Number = 10;
            while (angle < Math.PI * 2) {
                g.beginFill(color, 1.0);
                pt = Point.polar(r, angle);
                tmpPt = Point.polar(d, angle + Math.PI / 2);
                g.moveTo(pt.x, pt.y);
                pt = pt.add(tmpPt);
                g.lineTo(pt.x, pt.y);
                angle += angled * Math.PI / 180;
                pt = Point.polar(r, angle);
                tmpPt = Point.polar(d, angle + Math.PI / 2);
                tmpPt = tmpPt.add(pt);
                g.lineTo(tmpPt.x, tmpPt.y);
                g.lineTo(pt.x, pt.y);
                g.endFill();
                color = 0xFFFFFF - color;
            }
            //addChild(_srcCircle);
            stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
        
        private var cnt:int = 1;
        private function enterFrameHandler(e:Event):void 
        {
            cnt++;
            if (cnt % 20 == 0) {
                cnt = 0;
                var sp:Sprite = new Sprite;
                sp.graphics.copyFrom(_srcCircle.graphics);
                _canvas.addChild(sp);
            }

            for (var i:int = 0; i < _canvas.numChildren; i++) {
                sp = _canvas.getChildAt(i) as Sprite;
                if (sp == null) continue;
                sp.scaleX = sp.scaleY = sp.scaleX * .98;
                if (sp.scaleX < 0.01) {
                    _canvas.removeChild(sp);
                }
            }
        }
    }
}