forked from: キラキラ2

by fakestar0826 forked from キラキラ2 (diff: 114)
♥0 | Line 93 | Modified 2010-10-20 02:31:34 | MIT License
play

ActionScript3 source code

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

// forked from matsu4512's キラキラ2
package {
    import flash.events.TimerEvent;
    import flash.utils.Timer;
    
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BlendMode;
    import flash.display.PixelSnapping;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.geom.Matrix;
    
    import frocessing.color.ColorHSV;

    [SWF(width=465, height=465, backgroundColor=0x0, frameRate=30)]

    public class kirakira2 extends Sprite {
        
        private var cvs:BitmapData;
        private var glow_bmpData:BitmapData;
        private var glowMtx:Matrix;
        private var particles:Array;
        private var hsvc:ColorHSV = new ColorHSV(0,0.6,0.6);
        private var color:uint = 0;
        private var cnt:int = 0;
        
        public function kirakira2(){
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            
            this.cvs = new BitmapData(465, 465, false, 0x0);
            addChild(new Bitmap(cvs)) as  Bitmap;
            glow_bmpData = new BitmapData(465 / 5, 465 / 5, false, 0x0);
            var bm:Bitmap = addChild(new Bitmap(glow_bmpData, PixelSnapping.NEVER, true)) as Bitmap;
            bm.scaleX = bm.scaleY = 5;
            bm.blendMode = BlendMode.ADD;
            glowMtx = new Matrix(0.2, 0, 0, 0.2);
            particles = [];
            
            init();
            
            //addEventListener(Event.ENTER_FRAME, update);
            var timer:Timer = new Timer(300);
            timer.addEventListener(TimerEvent.TIMER, update);
            timer.start();
        }
        
        private function init():void
        {
            var n:int = 2000;
            
            while (n--) {
                hsvc.h += 3;
                var c:uint = Math.random() * 0xFFFFFF;//(hsvc.toRGB().value);
                createParticle(Math.random() * 465, Math.random() * 465, c, Math.random()*10-5, Math.random()*10-5);
            }
        }

        public function createParticle(xx:Number, yy:Number, c:int, vx:Number, vy:Number):void {
            var p:Particle = new Particle();
            p.x = xx;
            p.y = yy;
            p.vx = vx;
            p.vy = vy;
            p.c = c;
            particles.push(p);
        }
        
        public function update(e:TimerEvent):void {
            
            
            
            if(cnt % 2 == 1)
            {
                glowMtx.a=0.2;
                glowMtx.d=0.2;
                cvs.lock();
                cvs.fillRect(cvs.rect, 0);
                var n:int = particles.length;
                while (n--) {
                    var p:Particle = particles[n];
                    cvs.setPixel(p.x, p.y, p.c);
                    p.x++;
                    p.y++;
                }
                cvs.unlock();
                glow_bmpData.draw(cvs, glowMtx);
            }
            
            else
            {
                glowMtx.a=0.2;
                glowMtx.d=0.2;
                cvs.lock();
                
                cvs.floodFill(0, 0, 0);
                glow_bmpData.draw(cvs, glowMtx);
                cvs.unlock();
            }
            /*
            n = 10;
            hsvc.h += 3;
            var c:uint = (hsvc.toRGB().value);;
            while (n--) {
                createParticle(mouseX, mouseY, c, Math.random()*10-5, Math.random()*10-5);
            }
            */
            cnt++;
        }
    }
}

class Particle{
    public var x:Number;
    public var y:Number;
    public var vx:Number;
    public var vy:Number;
    public var c:uint;
}