はらはらと雪が降るActionScript

■ 説明 ■

ステージ上側のランダムな位置から雪を降らせます。
「はらはら」とした感じを出すために、落下の際にも方向やスピードをランダムに変化させています。
また、今回はクラスを外部ActionScriptファイルに定義して作成してみます。

フレーム1のスクリプト

    
            //ルートフレームループアクション
            _root.onEnterFrame = function():Void  {
              var make:Number = 1+Math.round(Math.random()*3);
              if (make == 2) {
                var flake:snowDrop = new snowDrop();
              }
            };
    
          
          

snowDrop.as

    
          import mx.utils.Delegate; //Delegateクラスを読み込む
    
          class snowDrop {
            static var depth:Number = 1;		//スタティック(静的)変数の設定
            private var _new_x:Number;
            private var _new_y:Number;
            private var _vx:Number;
            private var _vy:Number;
            private var mc:MovieClip;
            
            //snowDropコンストラクタ関数
            public function snowDrop() {
              mc = _root.attachMovie("flake", "flake"+depth, depth);	//雪の生成
              this._new_x = mc._x=10+Math.random()*(Stage.width-20);
              this._new_y = mc._y=-20;
              var rvx:Number = 1+Math.round(Math.random()*6);
              this._vx = (rvx<3) ? rvx*-1 : rvx;
              this._vy = 2+Math.random()*5;	//Y軸のスピード
              mc.onEnterFrame = Delegate.create(this, enterframe_me);
              depth++;	//スタティック(静的)変数をカウントアップ
            }
            
            //snowDropインスタンスのフレームループアクション
            private function enterframe_me():Void {
              if (mc._y>(Stage.height+10)) {
                mc.removeMovieClip();		//ステージ上でインスタンスを破棄
              }
              var mvx:Number = 1+Math.round(Math.random()*6);
              this._vx = (mvx<3) ? this._vx*-1 : this._vx;		//X軸の方向の不規則性
              this._new_x += this._vx;
              this._new_y += this._vy;
              mc._x += (this._new_x-mc._x)/4;		//目標X座標に原則処理
              mc._y += (this._new_y-mc._y)/4;		//目標Y座標に原則処理
            }
          }
          
          

今回使用したメソッド&プロパティ
MC.はムービークリップオブジェクトです。

Delegate.create() メソッド オブジェクトのスコープで関数を呼び出す
MC.attachMovie() メソッド シンボルから新規インスタンスを生成する
MC.attachMovie(識別子、新規インスタンス名、深度、複製いしたムービークリップに設定するプロパティを含むオブジェクト)
MC.removeMovie() メソッド スクリプトで生成したインスタンスを破棄する
MC._x プロパティ インスタンスのX座標
MC._y プロパティ インスタンスのY座標
Math.round() メソッド 少数点以下を四捨五入して最も近い整数にする
Stage.width プロパティ ステージの幅
Stage.height プロパティ ステージの高さ
MC.onEnterFrame イベントハンドラ フレームが再生されるたびに実行される