forked from: 偶然できたパーティクル

by itsukichang forked from 偶然できたパーティクル (diff: 40)
きらきら

サムネ白くなるのは何でなんやろ.
♥0 | Line 80 | Modified 2011-07-07 00:49:27 | MIT License
play

ActionScript3 source code

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

// forked from umi_kappa's 偶然できたパーティクル
package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.ColorTransform;
    import flash.events.Event;
    import flash.display.*;
    
    import flash.geom.Matrix;
    
    import net.hires.debug.Stats;
    
    [SWF(width = "465", height = "465", backgroundColor = "0x000000", frameRate = "30")]
    
    public class FlashTest extends Sprite {
        //ステージサイズ
    private var _stageW:int;
    private var _stageH:int;
        
    //全てをDrawする
    private var _drawCanvas:BitmapData;
        
    //_drawCanvasが入る
    private var _bmp:Bitmap;
    
    //パーティクルの配列
    private var _pVector:Vector.<Particle>;
    
    private var _glow:BitmapData;
    private var _glowMtx:Matrix;

        public function FlashTest() {
            
            init();
            
            startEvent();
        }
        
        //--------------------------------------------------------------------------
        //
        //  初期化
        //
        //--------------------------------------------------------------------------
        private function init():void {
            addChild(new Stats());
            
            _stageW = stage.stageWidth;
            _stageH = stage.stageHeight;
    
            _pVector = new Vector.<Particle>();
            
            _drawCanvas = new BitmapData(_stageW, _stageH, true, 0x0);
            _bmp = new Bitmap(_drawCanvas);
            addChild(_bmp);
            
            _glow = new BitmapData(_stageW / 4, _stageH / 4, true, 0x0);
            var bm:Bitmap = new Bitmap(_glow, PixelSnapping.NEVER, true);
            addChild(bm);
            bm.scaleX = bm.scaleY = 4;
            bm.blendMode = BlendMode.ADD;
            _glowMtx = new Matrix(0.25,0,0,0.25);

        }
        
        
        //----------------------------------
        //  Start Event
        //----------------------------------
        private function startEvent():void {
            addEventListener(Event.ENTER_FRAME, onEF);
        }
        
        
        //----------------------------------
        //  ENTER_FRAME
        //----------------------------------
        private function onEF(e:Event):void {
            //パーティクルを生成
            addParticle(mouseX, mouseY, 0, Math.random()*0.5);
            
            //パーティクルをうごかす
            moveParticle();
        }
        
        
        
        //----------------------------------
        //  draw
        //----------------------------------
        public function addParticle(x:int, y:int, vx:Number, vy:Number):void {
            var _p:Particle = new Particle(x, y, vx, vy, Math.random()*0xffffffff);
            _pVector.push(_p);
        }

        //----------------------------------
        //  move
        //----------------------------------
        public function moveParticle():void {
            _drawCanvas.lock();
            var _colorT:ColorTransform = new ColorTransform(1, 1, 1, 0.9);
            _drawCanvas.colorTransform(_drawCanvas.rect, _colorT);
            //_drawCanvas.fillRect(_drawCanvas.rect, 0x0);
            _glow.fillRect(_glow.rect, 0x0);
            var _p:Particle;
            var _num:uint = _pVector.length;
            for (var i:uint = 0; i < _num; i++) {
                _p = _pVector[i];
                _p.x += _p.vx;
                _p.y += _p.vy;
                _p.color += -0x01000000;
                   // _p.color += Math.random() * 0x00ffffff
                _drawCanvas.setPixel32(_p.x, _p.y, _p.color);
            }
            _drawCanvas.unlock();
            _glow.draw(_drawCanvas, _glowMtx);
        }
    }
}



class Particle {
    //x軸
    public var x:Number;
    //y軸
    public var y:Number;
    //x軸方向の速さ
    public var vx:Number;
    //y軸方向の速さ
    public var vy:Number;
    //色
    public var color:Number;
    
    public function Particle(x:Number, y:Number, vx:Number, vy:Number, color:Number):void {
        this.x = x;
        this.y = y;
        this.vx = vx;
        this.vy = vy;
        this.color = color;
    }
}