- ベストアンサー
[FlashMX2004]動的にファイルを読み込むようなスライドショーを作りたい。
使用OSとFlashのVerは以下です。 OS:Windows2000Pro Flash:FlashMX2004 FlashMX2004でスライドショーを作ろうと思っています。 以下のような仕様にしようと計画しています。 1.一定時間毎に画像が切り替わる 2.画像の切り替えはクロスフェード(というのでしょうか、一方の画像が消えていくと同時に次の画像が浮かび上がってくる) 3.画像数は1500枚 画像数が数枚ならあらかじめ画像を読み込んでおいて順次表示すればいいとおもいましたが、画像数が膨大であるためその方法は使えそうにありません。 ディレクトリに画像をまとめて置いておき、実行中に読み込む、、、という方法がいいのかなと思いましたが、そんなことはできるのでしょうか。また、簡単な例(できれば上記仕様を満たすようなやつ)を教えていただければありがたいです。 よろしくおねがいします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
スクリプトはだいぶん前からできていたのですが, その説明が… 難しくて… 。 うまく説明できないので,順を追って書いています。 モーショントゥイーンで,ムービークリップのアルファを変えて, そのムービークリップに外部JPEGを読み込む方法も少しは考えてみましたが, ループするところがむずかしいので,全部スクリプトにしました。 1つの参考例として見てみてください。 1500枚ですね。すごい数…。 まず,外部のJPEGの名前ですが, 任意の名前だとそれ用のデータベースを作らないとならないので, それだけですごい行になります。 なので, 1.jpg 2.jpg 3.jpg ~ 1500.jpg のように数字で連番にします。 Flashですが,メインムービーを3レイヤーにします。 □レイヤー3 筆・・|●| ←スクリプトMC □レイヤー2 筆・・|●| ←インスタンス名:MCb □レイヤー1 筆・・|●| ←インスタンス名:MCa そして,各レイヤーには, スクリプトを書くMC(ムービークリップ) インスタンス名 MCb というMC インスタンス名 MCa というMC を作ってそれぞれのレイヤーのステージ上に配置します。 すべてとりあえず1cm四方くらいの小さめのMCで良いです。 四角い塗りを各レイヤーに書いて,それぞれムービークリップシンボルにしてください。 赤・青・緑 のように極端な色にしておいたほうが作成のときは区別しやすいです。 「MCa」 と 「MCb」 はレイヤーが違うだけで,ステージの左上の方の同じ座標が良いです。 「スクリプトを書くMC」 インスタンス名は不要です。ステージ外でも何でも良いです適当に置いてください。 それで,「スクリプトを書くMC」に以下のように書くと,「MCa」 と 「MCb」 が交互に入れ替わると思います。 ※ スクリプトの各行の前には,インデントを付けるため, 全角空白文字を入れています。 コピペをする場合は, 全角空白を ""(何もなし) で置換するなどして, 全角空白を削除してください。 ------------------------------------- onClipEvent (load) { //アルファの変化の速さの設定(※1↓) spd_alp = 5; //MCa のアルファを 101 に設定(※2↓) _root.MCa._alpha = 101; //MCb のアルファを -1 に設定(※2↓) _root.MCb._alpha = -1; } //以下,1フレーム進む時間ごとに1回実行 onClipEvent (enterFrame) { //MCa のアルファが 0 より小さいとき if (_root.MCa._alpha<0) { //変数 MCa_alp を spd_alp( 5 )を代入 MCa_alp = spd_alp; //変数 MCb_alp に -spd_alp( -5 )を代入 MCb_alp = -spd_alp; //MCa のアルファが 100 より大きいとき } else if (_root.MCa._alpha>100) { //変数 MCa_alp を -spd_alp( -5 )を代入 MCa_alp = -spd_alp; //変数 MCb_alp に spd_alp( 5 )を代入 MCb_alp = spd_alp; } //MCa のアルファを MCa_alp ずつ加算 _root.MCa._alpha += MCa_alp; //MCb のアルファを MCa_alp ずつ加算 _root.MCb._alpha += MCb_alp; } ------------------------------------- ※1 5 は可変です。好みに応じて変えてください。 ※2 ちょっと邪道かもしれませんが, MCa._alpha<0 などを一瞬だけ成立させるために わざと_alphaの値を 101 とか -1 とかにしています。 上のスクリプトを土台として, 外部JPEGを 1.jpg~1500.jpg を順次読み込ませる部分を付け加えて行くと以下のようになります。 ※ 同じく。コピペをする場合は,全角空白を削除してください。 ---------------------------------------- onClipEvent (load) { //アルファの変化の速さの設定(※1↑) spd_alp = 5; //静止時間の設定(※3↓) stop_time = 12; //写真の枚数を記入(※4↓) photo_all = 5; //変数 phot_no を初期化 phot_no = 1; //変数 count1・2の初期化 count1 = 0; count2 = 0; _root.MCa._alpha = 101; _root.MCb._alpha = -1; //MCaに 1.jpg を読み込む _root.MCa.loadMovie(phot_no+".jpg"); } onClipEvent (enterFrame) { //MCa のアルファが 0 より小さくなったとき if (_root.MCa._alpha<0) { _root.MCa._alpha = 0; _root.MCb._alpha = 100; MCa_alp = MCb_alp=0; //変数 i の初期化 i = 1; //phot_noを 1 増やす phot_no++; //もしphot_noが全枚数に達したら if (phot_no>photo_all) { //phot_noを 1 に戻す phot_no = 1; } //MCa に phot_no.jpg を読み込む _root.MCa.loadMovie(phot_no+".jpg"); //MCa のアルファが 100 より大きくなったとき } else if (_root.MCa._alpha>100) { _root.MCa._alpha = 100; _root.MCb._alpha = 0; MCa_alp = MCb_alp=0; //変数 i の初期化 j = 1; phot_no++; if (phot_no>photo_all) { phot_no = 1; } //MCb に phot_no.jpg を読み込む _root.MCb.loadMovie(phot_no+".jpg"); } //count1 が stop_time(12)以上になれば if (count1>=stop_time) { i = 0; count1 = 0; //アルファの変化の入れ替え MCa_alp = spd_alp; MCb_alp = -spd_alp; //count2 が stop_time(12)以上になれば } else if (count2>=stop_time) { j = 0; count2 = 0; //アルファの変化の入れ替え MCa_alp = -spd_alp; MCb_alp = spd_alp; } //以下は常に実行 _root.MCa._alpha += MCa_alp; _root.MCb._alpha += MCb_alp; count1 += i; count2 += j; } ---------------------------------------- ※3 アルファが100である時間を設定してください。 stop_time = 12; にしてありますが,これは デフォルトのフレームレートで約1秒です。 ※4 photo_all = 5; にしていますが, これを 1500 などにしてください。 上のスクリプトを試すのにJPEGを5枚用意して 実験したので5になっているだけです。 上のスクリプトを,自分なりにつくり変えると, 考えられていることができると思います。 しかし! 上のままでは,そのページに来た人は,いつも 1500枚あるうちの 1.jpg から見ることになります!! ですから,ここをどうするか考えなければなりません。 次の例は 10.jpg まで見た人が次訪問したときは 11.jpg から見せる方法です。 これには,Shared Objectを使います。参考↓。 http://www.macromedia.com/jp/support/flash/ts/documents/fl0277.html 10.jpg まで見たことを sol ファイル(JavaScriptのCookieに似たもの)に記憶させて置いて, 次回は,11.jpgから見せれば良いわけです。 ランダムで表示させるか,Shared Objectにするかどちらにしようか迷いましたが, この例ではShared Objectにしておきます。 上のスクリプトにShared Objectの部分を付け足して全部書くと以下のようになります。 ※ 同じく。コピペをする場合は,全角空白を削除してください。 ----------------------------------------- onClipEvent (load) { spd_alp = 5; stop_time = 12; photo_all = 5; count1 = 0; count2 = 0; //★ローカルのsolファイルを読みに行く sol_count = SharedObject.getLocal("mySol"); //もしsolファイルにphoto_countがあれば if (sol_count.data.photo_count != undefind) { phot_no = sol_count.data.photo_count; //もしsolファイルにphoto_countがなければ } else { phot_no = 1; } _root.MCa._alpha = 101; _root.MCb._alpha = -1; _root.MCa.loadMovie(phot_no+".jpg"); } onClipEvent (enterFrame) { if (_root.MCa._alpha<0) { _root.MCa._alpha = 0; _root.MCb._alpha = 100; MCa_alp = MCb_alp=0; i = 1; phot_no++; if (phot_no>photo_all) { phot_no = 1; } _root.MCa.loadMovie(phot_no+".jpg"); sol_count.data.photo_count = phot_no-1; } else if (_root.MCa._alpha>100) { _root.MCa._alpha = 100; _root.MCb._alpha = 0; MCa_alp = MCb_alp=0; j = 1; phot_no++; if (phot_no>photo_all) { phot_no = 1; } _root.MCb.loadMovie(phot_no+".jpg"); sol_count.data.photo_count = phot_no-1; } if (count1>=stop_time) { i = 0; count1 = 0; MCa_alp = spd_alp; MCb_alp = -spd_alp; } else if (count2>=stop_time) { j = 0; count2 = 0; MCa_alp = -spd_alp; MCb_alp = spd_alp; } _root.MCa._alpha += MCa_alp; _root.MCb._alpha += MCb_alp; count1 += i; count2 += j; } ------------------------------------------- という具合になります。 >> 動的にファイルを読み込むようなスライドショーを作りたい。 Flash自体は大別すると,動的側面を持った,静的ファイルです。 今見ている,ココ(教えてサイト)や掲示板,チャットのように, 見る状況によって変わったり,生成されたりするのが動的ファイル(サイト)です。 http://seodictionary.ifdef.jp/douteki/ CGIやPHPと組み合わせれば,動的になります。 また,上のようにShared Objectを使えば,完全とは言えませんが動的な側面を持つことができます(?)。 まぁ一応,動的にファイルを読み込んではいます。 ランダムや,時刻によって表示を変えるのも,動的と言えば動的かもしれません。 1500枚を読み込ませる方法は他にもたくさんあると思います。 1つの方法例として書きました。
その他の回答 (1)
- tomuo
- ベストアンサー率51% (20/39)
こんにちは。 jpegかgifであればloadMovieすればできます。 クロスフェードについてはloadMovieのターゲットとなるムービークリップを2つ用意して、そのターゲットに対して交互に画像をロードすれば良いと思います。(前面のムービークリップのアルファをフェードさせて。前面0%(透明)の時に前面にロード、前面100%の時は背面のターゲットにロードする)
お礼
詳細な説明ありがとうございました。 かなり参考になりました。