- 締切済み
外部画像を1分ごとにランダムで読み込みたい
ParaFlaで外部画像がランダムに読み込まれて表示されるフラッシュを作りたいと思っています。 外部画像の枚数は不定で(今後増えます)、ファイル名は連番で付けています。 画像を1分ごとにクロスフェードで切り替えながら読み込むには、 ActionScriptをどう記述すればいいでしょうか。 このフラッシュはデジタル時計付きで(時計は問題なく動いています)、 画像の切り替えを時計と連動させ、1分ごとの切り替えにしたいと思っています。 12:01に1枚目が表示され、12:02に2枚目が表示され・・・という感じです。 時刻の1分ごとに、外部画像をランダムで読み込み、 クロスフェードで切り替えながら表示させたいと考えています。 お分かりになる方がいらっしゃいましたら、 アドバイスをどうぞよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
1つの状況例として, SWF とそれを貼り付ける HTML は同じ階層(フォルダ)にあるものとし その SWF や HTML と同じ階層の「image」というフォルダに 「pic0.jpg」「pic1.jpg」「pic2.jpg」~「pic19.jpg」 という20枚の画像があるものとします。 任意のフォルダ ├○○.html (SWFを貼り付け) ├○○.swf └image (フォルダ) ├pic0.jpg ├pic1.jpg ~略~ └pic19.jpg また 「ファイル」→「プロジェクトのプロパティ」で 「SWFバージョン」を「SWF7」以上に設定してあるものとします。 さらに 今現在作成されていらっしゃる時計やその他のものと 変数名 や イベントハンドラメソッド や 深度(上下順) や 座標などがかぶったり干渉し合うとマズいので 空のスプライトを作成するものとします。 その場合の その作成したスプライト内のフレーム1に書く スクリプト例 (ActionScript 1.0) です↓。 //======================================= //画像の基本ファイルパスの設定 var base_path = "image/pic"; //連番最高数字の設定 var max_num = 19; //拡張子の設定 var ext = ".jpg"; //フェードインするフレーム時間数を設定 var fade_frm = 20; //---↑以上が設定↑--- //画像ロード用のMC「mc0」と「mc1」を作成 this.createEmptyMovieClip("mc0", 0); this.createEmptyMovieClip("mc1", 1); //画像ロード用のMCの番号の初期値設定 var mc_num = 1; //変数 rnd_num にランダムな数を取得 var rnd_num = Math.floor(Math.random()*(max_num+1)); //「mc1」に最初の画像をロード this["mc"+mc_num].loadMovie(base_path+rnd_num+ext); //mc_num の 0 と 1 を逆転(三項演算) mc_num = (mc_num == 0) ? 1 : 0; //現在の保存用Dateオブジェクトの作成 var old_date = new Date(); //現在の保存用の秒を取得 var old_sec = old_date.getSeconds(); //MovieClipLoaderオブジェクト「mcl」を作成 var mcl = new MovieClipLoader(); //画像ロード監視用オブジェクト「lst」を作成 var lst = new Object(); //画像ロード完了時に実行するイベントハンドラメソッドの定義 lst.onLoadInit = function(mc) { //ロードしたMCを透明にする mc._alpha = 0; //ロードしたMCに毎フレーム実行するイベントハンドラメソッドを定義 mc.onEnterFrame = function() { //このMCを徐々にフェードイン this._alpha += 100/fade_frm; //もしMCのアルファが100以上になれば if (this._alpha>=100) { //MCのアルファを100で固定 this._alpha = 100; //この毎フレーム実行するイベントハンドラメソッドを削除 delete this.onEnterFrame; } }; }; //「mcl」のリスナーとして「lst」を登録 mcl.addListener(lst); //毎フレーム実行するイベントハンドラメソッドの定義 this.onEnterFrame = function() { //現在のDateオブジェクトを作成 var now_date = new Date(); //現在の秒を取得 var now_sec = now_date.getSeconds(); //現在の秒が0で 保存用の秒と違っていれば if (now_sec == 0 && now_sec != old_sec) { //変数 rnd_num にランダムな数を取得 rnd_num = Math.floor(Math.random()*(max_num+1)); //該当 MC の深度を1にする this["mc"+mc_num].swapDepths(1); //該当 MC に画像をロード mcl.loadClip(base_path+rnd_num+ext, this["mc"+mc_num]); //mc_num の 0 と 1 を逆転(三項演算) mc_num = (mc_num == 0) ? 1 : 0; } //現在の秒を保存 old_sec = now_sec; }; //======================================= 上記のスクリプトをフレーム1のイベントとして設定したスプライトを作成し そのスプライトを 「メイン」のイベントリストの 好きな深度 の 好きな座標 に配置すれば良いと思います。 上記スクリプトで使用している MovieClipLoader が Flash Player 7 以上用の SWF でないと動作しないため SWFバージョンを SWF7 または SWF8 に設定する必要があります。 ※参考図↓