- ベストアンサー
AS3でランダムな画像入れ替わりアニメ
- AS3を使用してランダムな画像入れ替わりアニメを作成する方法について教えてください。
- 画像がランダムに入れ替わるアニメーションをAS3で作成したいです。ページを開くと最初に画像1が表示され、一定の時間が経過するとフェードアウトして画像2が表示されます。同様にして画像3も表示する方法を教えてください。
- AS3を使って、画像のランダムな入れ替わりアニメーションを作成したいです。ページを開いたときには画像1が表示され、一定の時間が経過すると画像2に切り替わります。さらに一定時間が経過すると画像3に切り替わるようにしたいのですが、具体的なコードの書き方を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
alpha や enterFrame 以前に 「何をどうやって表示させるのか」 という根本的な方法が抜けているので回答しにくいですね。 「何をどうやって表示させるのか」によって enterFrame で実行されることは変わります。 まず 『「画像」とはJPEGなどビットマップ画像である』 とします。 次に 『「画像」はFLAファイルのライブラリの中に登録されている』 ものとします。 (=つまり 『外部ファイルをロードしていくパターンではないもの』 とします。) この条件であるとするなら, ライブラリからステージ上にランダムに画像を呼びだしてきて表示させるのが簡単なように思います。 まとめると ライブラリの中に登録されているビットマップ画像(JPEGなど)を 10秒間隔でステージ上にランダムに呼びだしてきて "enterFrame"(Event.ENTER_FRAME) で alpha を 0 から 0.15 ずつ加算する。 という場合の方法例を書きます。 === === === まず, ライブラリにあるランダムに表示させたいビットマップ画像に クラス名を付けて行きます。 ライブラリのビットマップ画像を選択して, 右クリックなどからプロパティを表示させると, 「リンケージ」の欄があると思いますから, □ActionScript用に書き出し にチェックを入れて クラス(C)[ ] となっているところに,1つずつ違うクラス名を指定して行きます(下の図↓)。 この説明例では, 5つの画像があって, 「Img0」,「Img1」,「Img2」,「Img3」,「Img4」 というクラス名を付けたということにします。 その場合, メインのタイムラインのフレームには次のように書けば良いと思います。 ================================================= // ライブラリのBitmapDataの Img* の最終番号を設定 var last_num:int=4; // Img* の準備 for (var i:int = 0; i<=last_num; i++) { // クラス名からクラスを参照 var myClass:Class=Class(getDefinitionByName("Img"+i)); // BitmapDataクラスのインスタンス myBMD* を作成 this["myBMD"+i]=new myClass(0,0); } // カウント用変数の初期化 var cnt:int=0; // Timerクラスのインスタンスを作成(実行間隔,繰り返し回数(0は無限)) var myTimer:Timer=new Timer(10000,0); //間隔ごとに発生するイベントリスナーを登録(イベント,実行関数) myTimer.addEventListener("timer", startFadeIn); // リスナーで呼び出される関数 startFadeIn の定義 function startFadeIn(evt:TimerEvent):void { // フェードインの準備をする関数 setFadeIn の実行 setFadeIn(); } //タイマーの動作を開始 myTimer.start(); // フェードインの準備をする関数 setFadeIn の定義 function setFadeIn():void { // カウントを1加算する cnt++; // ランダムな 0~last_num の整数を取得 var rnd:int = Math.floor(Math.random()*(last_num+1)); // Bitmapクラスのインスタンス myBMP* を作成 this["myBMP"+cnt]=new Bitmap(this["myBMD"+rnd]); // 座標を指定 this["myBMP"+cnt].x=50; this["myBMP"+cnt].y=20; // 初期不透明度を指定 this["myBMP"+cnt].alpha=0; // myBMP* を配置 addChild(this["myBMP"+cnt]); // myBMP* に毎フレーム発生するイベントリスナーを登録(イベント,実行関数) this["myBMP"+cnt].addEventListener("enterFrame" ,fadeIn); // カウントが3以上になれば2つ下の画像を削除 if (cnt>=3) { removeChild(this["myBMP"+(cnt-2)]); } } // フェードインをさせる関数 fadeIn の定義 function fadeIn(evt:Event):void { // myBMP* の不透明度を 0.15 ずつ加算 evt.target.alpha+=0.15; // もし 不透明度が 1 以上になれば if (evt.target.alpha>=1) { // 不透明度を 1 で固定 evt.target.alpha=1; // 毎フレーム発生するイベントリスナーを削除 evt.target.removeEventListener("enterFrame" ,fadeIn); } } // フェードインの準備をする関数 setFadeIn の初回実行 setFadeIn(); ================================================= ※10秒(10000ミリ秒)ごとに何かをさせるのには Timerクラスを使用しています。 ※ランダムとは重複がある場合も含みます。 上の例でも同じ画像が連続で呼びだされる場合があります。 もし,重複連続出没させない場合は 具体的に「どうしたいのか」をご自身の中でハッキリさせて, それなりの対処をする必要があると思います。 [参考] FN0212003 - 配列を偏りなくランダムに並替える http://www.fumiononaka.com/TechNotes/Flash/FN0212003.html ↑あくまでも一参考例です。 どのようなランダム数を発生させたいかは作者でないとわかりません。
その他の回答 (1)
- kot_o
- ベストアンサー率16% (6/36)
業務で、ActionScriptを扱っている者です。 画像を時間ごとに切り替えられればいいのですね? 1. 時間に関して、 >画像1や2、3などが最初にフェードインする時は「画像1_mc.alpha = >0」を設定して、enterFrameイベント設定で、"+=0.15"などと設定すれ >ばいいと思うのですが。。。 動けば問題ないと思いますが、getTimer()を使うことをお勧めします。 swf起動から経過した時間が取ってこれるので、どれぐらい時間が経過したか調べられるでしょう。 2.切り替えに関して、オブジェクトのalpha か visivle を変更すればできるでしょう。 実際に使うとこんな感じだと思います。 // 基準時間 var old_time = getTimer(); -------------------------------------------------------- // enterFrame内で --------------------------------------------------------- if ( old_time + 10000 <= getTimer() ) { // フラグで切り替え if ( flag == 1 ) { a_mc.alpha = 0; // a画像を消す b_mc.alpha = 100; // b画像を表示 } else { a_mc.alpha = 100; // a画像を表示 b_mc.alpha = 0; // b画像を消す } // 時間更新 old_time = getTimer(); } 自宅のPCにCSが入っていないので確認できませんが、それほど間違った動きはしないと思います。 関数の使い方は、自分で調べてください。
お礼
回答が遅くなってすいませんでした。 こんなに丁寧に回答を頂けれると思わなかったので感激しています。 さっそく試させていただきます。 また、報告すると思いますが、 取り急ぎ、ありがとうございました。
お礼
回答が遅れてしまってすいませんでした。 感激です!こんなに親切に回答して下さって、ほんとにありがたいです。 さっそく実行してみます。 結果は報告しますので、また書き込みいたします。 取り急ぎ、ありがとうございました。