- ベストアンサー
ActionScriptでフェードインから反転のアニメーションを作る方法
- ActionScriptを使用してランダムな画像がフェードインし、一定の時間経過後に反転するアニメーションを作りたいです。
- 反転すると別のランダムな画像が読み込まれ、また一定の時間経過後に再び反転すると新しいランダムな画像が読み込まれるという変わったアニメーションです。
- Flash 8とActionScript 2.0の環境で作業を行っています。現在はフェードインと一度の反転まで実装済みで、反転後の処理をどう組めば良いのかわかりません。どなたか教えていただけないでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
onEnterFrame=function(){}; は onClipEvent(enterFrame){} と違って, 途中で削除したり,違う function に切り替えたりすることができます。 フラグを変えてif文で分岐させて動作を切り替えて行く方法もできなくはありませんが, 複雑になって頭がこんがらがるので, onEnterFrame で実行させる関数を切り替えて行く方法はいかがでしょうか。 SWF や HTML と同じフォルダに 「0.jpg」「1.jpg」「2.jpg」「3.jpg」「4.jpg」 という外部JPEGがあるとします。 ムービーの階層構造が次のようになっているものとして, _root └parent_mc └child_mc 「parent_mc」のフレーム1に書くスクリプト例です。 ------------------------------------------------------- // ---ランダム秒設定--- var max_sec:Number = 9; var min_sec:Number = 4; var random_sec:Number = Math.floor(Math.random()*(max_sec-min_sec+1))+min_sec; // ---MCのスケール関係--- var scale_spd:Number = 8; // ---初期状態の設定--- // このMCのアルファを 0 にしておく _alpha = 0; // 0~4.jpg から ランダムな JPEG を child_mc にロード child_mc.loadMovie(Math.floor(Math.random()*5)+".jpg"); // 「フェードインする関数」を1フレーム進む時間毎に随時実行 onEnterFrame = fadeIn; //---フェードインする関数を定義--- function fadeIn():Void { // このMCのアルファを2ずつ加算 this._alpha += 2; if (this._alpha>99) { this._alpha = 100; // ランダム秒後に「待って実行する関数」を実行 setTimeout(InversionTimer, random_sec*1000); // このMCの onEnterFrame を削除 delete onEnterFrame; } } // ---待って実行する関数を定義--- function InversionTimer():Void { // 「縮小する関数」を1フレーム進む時間毎に随時実行 onEnterFrame = scaleDown; } // ---縮小する関数を定義--- function scaleDown():Void { // このMC横スケールを縮小 _xscale -= scale_spd; // もしこのMCの横スケールが0以下になれば if (_xscale<=0) { // このMCの横スケールを0にする _xscale = 0; // 0~4.jpg から ランダムな JPEG を child_mc にロード child_mc.loadMovie(Math.floor(Math.random()*5)+".jpg"); // 「拡大する関数」を1フレーム進む時間毎に随時実行 onEnterFrame = scaleUp; } } // ---拡大する関数を定義--- function scaleUp():Void { // このMC横スケールを拡大 _xscale += scale_spd; // もしこのMCの横スケールが100以上になれば if (_xscale>=100) { // このMCの横スケールを100にする _xscale = 100; // ランダム秒後に「待って実行する関数」を実行 setTimeout(InversionTimer, random_sec*1000); // このMCの onEnterFrame を削除 delete onEnterFrame; } } ------------------------------------------------------- この場合は最後で InversionTimer に戻りますが, 同じ調子でどんどん関数で動作を足していくこともできますね。 onClipEvent(enterFrame){} の場合はどうしても スクリプトを中に中に入れ込んでコーディングしていかなければならない状態になりますが, onEnterFrame の方は 上のようにスクリプトを次へ次へ足して行くこともできるので柔軟に色々なことができます。
お礼
お返事遅くなりました、functionの切り替えのやり方に変えましたら、 すんなりできました。 なるほどonEnterFrameってフラグ変数作らなくても行動の切り替えできるんですね。関数の入れ子でやるとわりと簡単にできてしまうなんて、これを教えてくれなければおそらくあきらめていたかもしれません。 ちなみに、 // 0~4.jpg から ランダムな JPEG を child_mc にロード child_mc.loadMovie(Math.floor(Math.random()*5)+".jpg"); の部分は var max_photo:Number = 5; // 使う写真の最大枚数 var rand:Array = new Array(max_photo); for(i=0; i<max_poto; i++) { rand[i] = i; } var j:NUmber = rand.lenght; while (j--) { var j = Math.floor(Math.random()*(j+1)); var swap = rand[j]; rand[j] = rand[k]; rand[k] = swap; } child_mc.loadMovie(rand[k] +".jpg"); てやると、毎回ランダムに違う画像読んでくれて完璧ですね。 ご丁寧に教えていただきありがとうございました。