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

パーティクル

Get Adobe Flash player
by matsu4512 17 Jun 2009
/**
 * Copyright matsu4512 ( http://wonderfl.net/user/matsu4512 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/uNDU
 */

package
{
    import __AS3__.vec.Vector;
    
    import flash.display.BlendMode;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.BlurFilter;

    [SWF(backgroundColor=0x000000)]

    public class Sample2 extends Sprite
    {
        // particleを保管するための配列
        private var arrays:Vector.<particle>;

        public function Sample2()
        {
            
            stage.scaleMode=StageScaleMode.NO_SCALE;
            stage.align=StageAlign.TOP_LEFT;
            stage.frameRate=40;
            // FrameRate:1秒間に計算する回数
            // 配列の初期化
            arrays = new Vector.<particle>();
            // イベントの追加
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
            addEventListener(Event.ENTER_FRAME, onFrame);
        }


        private function onFrame(e:Event):void
        {
            // 配列の長さを獲得
            var i:int=arrays.length;
            // 配列の長さの分だけループ
            while(i)
            {
                i--;
                // 配列から要素を取りだす
                var p:particle = arrays[i] as particle;
                p.x+=p.vx;
                p.y+=p.vy;
                p.z+=p.vz;
                p.rotationX += 5;
                p.rotationY += 3;
                //vyの更新
                p.vx+=0.8;

                //アルファ値の変更
                p.alpha-=0.01;

                // アルファ値がゼロなら削除する
                if (p.alpha <= 0)
                {
                    // 画面から削除
                    removeChild(p);
                    // 配列からも削除
                    arrays.splice(i, 1);
                    // ヌルを代入
                    p=null;
                }
            }
        }

        private function onMove(e:MouseEvent):void
        {
            var p:particle=new particle(mouseX, mouseY, 0, 6 * Math.random() - 3, 6 * Math.random() - 3, -20 * Math.random(),
                                             0xffffff * Math.random());
            addChild(p);

            // フィルタとか追加
//            p.filters=[new BlurFilter(10, 10, 1)];
            p.blendMode=BlendMode.ADD;

            // 配列に格納
            arrays.push(p);
        }
    }
}

    import flash.display.Sprite;
    import flash.filters.BlurFilter;

    // クラス「Particle」
    // Spriteを継承したクラスを作成する
class particle extends Sprite
{
    // x方向とy方向とz方向の移動量
    public var vx:Number;
    public var vy:Number;
    public var vz:Number;
        // コンストラクタ
    public function particle(x:Number, y:Number, z:Number, vx:Number, vy:Number, vz:Number, color:uint)
    {
        // 変数の初期化
        this.x=x;
        this.y=y;
        this.z=z;
        this.vx=vx;
        this.vy=vy;
        this.vz=vz;
        // 円を書く
        graphics.beginFill(color, 1);
        graphics.drawCircle(0, 0, 30 * Math.random() + 3);
        graphics.endFill();
    }
}