はらはらと雪が降る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 | イベントハンドラ | フレームが再生されるたびに実行される |
