forked from: forked from: forked from: massmedian challenge

by yabuchany forked from forked from: forked from: massmedian challenge (diff: 128)
http://wonderfl.net/c/9FS3の「ズキュウウウン光るパンダ」の光る部分のソースを付け足してみました。

コンストラクタ以下のDo not change following codes.の部分を変更してしまいました。
♥0 | Line 181 | Modified 2010-12-09 12:13:12 | MIT License | (replaced)
play

ActionScript3 source code

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

// forked from yabuchany's forked from: forked from: massmedian challenge
// forked from Inspired12's forked from: massmedian challenge
// forked from checkmate's massmedian challenge
package {
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.net.*;
    import flash.system.*;
    import flash.system.LoaderContext;
    [SWF(backgroundColor="0", frameRate="60", width="465", height="465")]
    public class Begineer extends Sprite {

        private static var basePath:String = "http://assets.wonderfl.net/images/related_images/";
        private static var sunshinePath:String = "9/9b/9bbe/9bbec77d53bddc5e7a5f2c00abbade6bd641c549";
        private static var lightPath:String = "4/40/400b/400b814a16b90c750e41bcd00890213280cd1be7";
        private var loader:Loader;
        private var trianglelines:TriangleLines;
        private var light:Sprite;
        
        
        //-------------------------------//
        // Use properties as follows.
        //-------------------------------//
        private var _sliceList:Array;
        private var i:uint = 1000;
        private var k:Number = 1;
        private var p:DisplayObject;
        private var o:DisplayObject;
        //-------------------------------//
        // Change functions as follows.
        //-------------------------------//
        public function updateEnterFrame( e:Event ):void {
            var myShape:Shape = new Shape();
            addChild(myShape);
            myShape.graphics.beginFill(0xcc0000);
            myShape.graphics.drawRect(0, 150, 465, 165);
            myShape.graphics.beginFill(0xcccccc);
            myShape.graphics.drawEllipse(80, 150, 300,165);
            myShape.graphics.beginFill(0x000000);
            myShape.graphics.drawCircle(stage.stageWidth / 2, stage.stageHeight / 2, 80);
            myShape.graphics.beginFill(0xcc0000);
            myShape.graphics.drawCircle(stage.stageWidth / 2, stage.stageHeight / 2, 60);
            setChildIndex(myShape, 0);
            k = 0;
           for each(p in _sliceList){
                   //p.y = Math.cos(i/20)*(k/2)+200;
                        //p.x = Math.sin(i/10)*(k/2)+180;
                        //p.scaleX = 2;
                        p.x = stage.stageWidth / 2;
                        p.y = stage.stageHeight / 2;
                        p.rotation = Math.cos(i/100)*(k+i);
                        k++;
                   }
                    i++;    
        }
        //-------------------------------//
        // Do not change following codes.
        //-------------------------------//
        public function Begineer(){
            var ctxt  :LoaderContext = new LoaderContext(true);
            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onLoadComplete );
            loader.load( new URLRequest("http://swf.wonderfl.net/static/assets/massmedian.png"), ctxt );
            init();
            setup();
        }
        
        public function onLoadComplete(e:Event):void {
            var loader:Loader = LoaderInfo( e.target ).loader;
            loader.contentLoaderInfo.removeEventListener( Event.COMPLETE, onLoadComplete );
            
            var bitmapdata:BitmapData = new BitmapData( loader.width, loader.height, true, 0xFF0000 );
            bitmapdata.draw( loader );
            
            _sliceList = sliceBanner( bitmapdata, bitmapdata.width );
            
            addEventListener( Event.ENTER_FRAME, updateEnterFrame );
        }
        
        
        private function sliceBanner( banner:BitmapData, length:int = 100 ):Array{
            var sliceList:Array = [];
            var w:int = Math.floor( banner.width/length );
            var h:int = Math.floor( banner.height );
            
            var t:int = Math.ceil( banner.width - w*length );
            var mat:Matrix = new Matrix();
                
            for( var i:int = 0; i<length; i++ ) {
                var bmpd :BitmapData = new BitmapData( w, h, true, 0xFFFF00 );
                mat.tx = -w*i;
                bmpd.draw( banner, mat );
                var part:DisplayObject = addChild( new Bitmap( bmpd ) );
                part.x = w*i;
                sliceList.push( part );
            }
            return sliceList;
        }

        private function init():void {
            draw();
            var rect:Rectangle = new Rectangle(0, 0, 465, 465);
            trianglelines = new TriangleLines(rect, 0x000000);
        }
        private function complete(evt:Event):void {
            loader.removeEventListener(Event.COMPLETE, complete);
            var content:MovieClip = MovieClip(evt.target.content);
            setup();
            loader = null;
        }
        private function setup():void {
            addChild(light);
            addChild(trianglelines);
            trianglelines.start();
        }
        private function draw():void {
            drawSun();
            drawLight();
        }

        private function drawSun():void {
            var matrix:Matrix = new Matrix();
            matrix.createGradientBox(200, 200, 0, -90, -90);
            graphics.beginGradientFill(GradientType.RADIAL, [0xFFFFFF, 0xFFFFFF, 0xFFFFFF], [1, 0.3, 0], [25, 102, 231], matrix);
            graphics.drawCircle(10, 10, 100);
            graphics.endFill();
            var shine:Loader = new Loader();
            addChild(shine);
            shine.alpha = 0.5;
            shine.load(new URLRequest(basePath + sunshinePath), new LoaderContext(true));
        }
        private function drawLight():void {
            light = new Sprite();
            //addChild(light);
            light.x = 232;
            light.y = 232;
            light.blendMode = BlendMode.ADD;
            var _loader:Loader = new Loader();
            _loader.contentLoaderInfo.addEventListener(Event.INIT, initialize, false, 0, true);
            _loader.load(new URLRequest(basePath + lightPath), new LoaderContext(true));
        }
        private function initialize(evt:Event):void {
            var content:Bitmap = Bitmap(evt.target.content);
            content.x = -128*3;
            content.y = -128*3;
            content.scaleX = content.scaleY = 3;
            content.smoothing = true;
            light.addChild(content);
            addEventListener(Event.ENTER_FRAME, rotate, false, 0, true);
        }
        private function rotate(evt:Event):void {
            light.rotation += 10;
        }
    }
}

//////////////////////////////////////////////////
// TriangleLinesクラス
//////////////////////////////////////////////////

import flash.display.*;
import flash.events.*;
import flash.geom.*;

class TriangleLines extends Sprite {
    private var rect:Rectangle;
    private var canvas:BitmapData;
    private static var radian:Number = Math.PI/180;
    private var color:uint;

    public function TriangleLines(r:Rectangle, c:uint) {
        rect = r;
        color = c;
        init();
    }

    private function init():void {
        canvas = new BitmapData(rect.width, rect.height, true, 0x00000000);
        addChild(new Bitmap(canvas));
    }
    public function start():void {
        drawLines();
        addEventListener(Event.ENTER_FRAME, update, false, 0, true);
    }
    private function update(evt:Event):void {
        canvas.lock();
        canvas.fillRect(rect, 0x00000000);
        drawLines();
        canvas.unlock();
    }
    private function drawLines():void {
        var line:Sprite = new Sprite();
        drawTriangle(line.graphics);
        var a:uint = 2;
        var rw:uint = rect.width;
        var rh:uint = rect.height;
        var length:uint = rw/2*Math.sqrt(2);
        for (var n:uint = 0; n < 360; n += Math.round(Math.random()*a)) {
            var dx:Number = Math.sin(n*radian)*length + rw/2;
            var dy:Number = Math.cos(n*radian)*length + rh/2;
            var matrix:Matrix = new Matrix();
            matrix.scale(5, Math.random()*length + length/2);
            matrix.rotate(-n*radian);
            matrix.translate(dx, dy);
            canvas.draw(line, matrix, null, null, null, false);
        }
        line = null;
    }
    private function drawTriangle(g:Graphics):void {
        g.beginFill(color);
        g.moveTo(-0.5, 0);
        g.lineTo(0.5, 0);
        g.lineTo(0, -0.5);
        g.lineTo(-0.5, 0);
        g.endFill();
    }
}