- ベストアンサー
画像を一定時間ごとに切り替えていくスクリプト
表題どおりなのですが、ホームページのTOPに画像を表示したくて色々試行錯誤中です。 希望は、a.jpg→b.jpg→c.jpgのフェードインフェードアウトを繰り返すといったような単純なものですが、 各画像を15秒ごととか決まった時間で自動的に切り替えていくには、どのようなスクリプトを書けば良いでしょうか? 初歩的な質問で申し訳ありませんが、アドバイスお願いします。 Flash8
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3 です。 まずは #2 で書いたスクリプトの(スクリプトのコメントの)訂正&お詫びをします。 1秒が1000ミリ秒ですから,1000ミリ秒が10秒というのは間違っていますね。すみません。 次のように訂正します。 ------------------------------------------- // このスクリプトを書いたフレームを停止 stop(); // 1000ミリ秒(1秒)後に実行 setTimeout(function () { // このスクリプトを書いたフレームを再生 play(); }, 1000); ------------------------------------------- で,#3 の 補足 に書いていらっしゃることへの回答です。 > この方法でタイムラインが半分以下になったにもかかわらず、 > ファイルサイズは同じ・・・と言う事は、フレームの長さはサイズに関係しないという> 事になるんですね? 動かすものがシンボル化されたインスタンスでしたら, さほど変わらないでしょう。 スクリプトで動かすにしても, モーショントゥイーンで動かすにしても, どちらにしても結局, 「あるインスタンスをA地点でのAAという状態からB地点でのBBという状態に変化させろ」という命令を書いていることに違いはありませんから。 たとえば, 動かすインスタンスが1つのみで, そのインスタンスが 100KB の JPEG 入りのグラフィックインスタンスやムービークリップインスタンスであったとします。 スクリプトで動かしてもモーショントゥイーンで動かしても, 結局そういうプログラム的なこと(インスタンスのプロパティを変化させるという命令)の容量はたいしたことありません。 せいぜい 数バイト~数キロバイト 程度でしょう。 100KB の JPEG の容量に比べれば全く無視できる大きさだということになります。 Flash(SWF) は動画ではありません。 インスタンスをなにがしかのデータやプログラムによって動かすものです。 したがってたいていは, SWF の容量の大半は インスタンスの容量 ということになります。 シェイプトゥイーン を使った動きなどは, フレームを使えば使うほど容量を食いますよ。 しかしちゃんとシンボル化されたインスタンスを動かしていれば, そのインスタンスの容量が Flash(SWF) ファイルの大半になるのが普通です。 単純に言うなら, 「ActionScript を使用するのは容量を減らすためではない」 ということです。
その他の回答 (3)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#2 です。 > まずタイムラインがaに来たときにストップ。 > 秒数(例えば10秒)が経過したらまたタイムラインが動く、 > bの画像のところにくる、ストップ・・・・繰り返し・・・ > の様な感じのイメージです。 それでしたら setTimeout関数 を使うのが良いと思います。 [setTimeout ActionScript]でGoogle検索したら 最初に出てきたページです↓。 「FN0512001 - setTimeout()関数 - Flash テクニカルノート」 http://www.fumiononaka.com/TechNotes/Flash/FN0512001.html 他のFlash作成ソフトのための解説ページですが、 ActionScript は共通です↓。 「Suzuka 基礎・基本 セルフタイマー(setInterval setTimeout)」 http://suzupara.iinaa.net/kiso311.html 下の方のURLのスクリプトをちょっと改良して, ストップ したいフレームをキーフレームにして, 次のスクリプトをそのキーフレームに書けば良いと思います。 -------------------------------- // このスクリプトを書いたフレームを停止 stop(); // 1000ミリ秒(10秒)後に実行 setTimeout(function () { // このスクリプトを書いたフレームを再生 play(); }, 1000); -------------------------------- その他の詳細説明は上記の 2ページ をご参考まで。
補足
回答ありがとうございます! 教えて頂いた最後のスクリプトをコピペでちゃんとできました! おかげでタイムラインがすっきりして、扱いやすくなりました。 質問ついでにもう一つお伺いしたいのですが、 この方法でタイムラインが半分以下になったにもかかわらず、 ファイルサイズは同じ・・・と言う事は、フレームの長さはサイズに関係しないという事になるんですね? もっと軽くなるかと思っていたので拍子抜けしています。 単純な画像の自動スライドショー的な作りをする時に、 ファイルサイズを軽く仕上げる方法とかありましたら、アドバイスいただきたいのですが・・・(^^;) よろしくお願い致します。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
> a.jpg→b.jpg→c.jpg というのは, Flash(FLAのシンボル)内に読み込んだ 「a.jpg」,「b.jpg」,「c.jpg」なのか, SWFパブリッシュ後に,外部 「a.jpgファイル」,「b.jpgファイル」,「c.jpgファイル」をロードするのかよくわかりませんが, もし, JPEGがFlash(FLAのシンボル)内に読み込んだ ものであるとするなら, 必ずしも絶対に ActionScript が必要なわけではありませんよね。 「a.jpg」,「b.jpg」,「c.jpg」 をそれぞれのグラフィックシンボルやムービークリップなどにして, そのインスタンスをステージ上でフェードイン&フェードアウトさせれば良いだけです。 もっとも ActionScript を使ってする方法も多数(無数に)ありますが, 使わなければ使わなくてもできます。 絶対に ActionScript が必要になる場合というのは, SWFに 外部 「a.jpgファイル」,「b.jpgファイル」,「c.jpgファイル」をロードするときとなります。 したがって, こちらの外部JPEGファイルをロードするしかたのご質問だと考えれば良いのでしょうか? またフェードイン&フェードウトの方法(表示させ方)もたくさんありますが, シンプルに 「a.jpg」がだんだん表示される → 「a.jpg」がだんだん消えて完全に見えなくなる → 「b.jpg」がだんだん表示される → 「b.jpg」がだんだん消えて完全に見えなくなる → 「c.jpg」がだんだん表示される → 「c.jpg」がだんだん消えて完全に見えなくなる と考えて良いのでしょうか? つまり,クロスフェードではない という意味です。 もし上記の場合であれば, ムービークリップを1つ作成して, そのムービークリップに外部JPEGをロードし, その外部JPEGをロードしたムービークリップの アルファを 0→100→0と変化させて 次のJPEGを同じムービークリップにロードする という方法を使うのが普通です。 ActionScript でする場合もしない場合も, どうするのかを "具体的に考えてから" でなければ, 作成もコーディングもできません。 これはActionScriptを使う使わないに限らず全く同じです。 この "具体的に考えること" ができなければ,何にしても全く作成できないということになります。 ついでに, "具体的に考えたこと" の提示がなければまともな ActionScript の回答も当然できません。 上の例は勝手に 「私が考えた具体的な条件とその方法」 です。 その「私が考えた具体的な条件とその方法」で回答を続けます。 HTML と SWF と JPEG が任意のフォルダの直下に置いてあるものとします。 (これも私が勝手に考えた条件です) 任意のフォルダ ├ ○○.html (○○.swf を貼り付ける) ├ ○○.swf (a~c.jpg をロードする) ├ a.jpg ├ b.jpg └ c.jpg 上記の 「○○.swf」 をパブリッシュする FLA ファイルのステージ上に, 小さな(または空の)ムービークリップを作成します。 そして例えば 「load_mc」 というインスタンス名を付けます。 その load_mc が存在するフレームのキーフレームに次のように書きます。 ---------------------------------------------- // 配列 jpgArr にロードする JPEG のファイル名を登録 var jpgArr:Array = new Array(); jpgArr[0] = "a.jpg"; jpgArr[1] = "b.jpg"; jpgArr[2] = "c.jpg"; // 画像を切り替える時間を登録(単位:秒) var timing = 7.5; // ムービーのフレームレート を登録(単位:fps) var fps:Number = 12; // 1フレーム辺りにフェードインアウトする速さを登録 var spd:Number = 5; // --- ↑以上が変更する設定 ↑------------ // // ロード用のMC load_mc のアルファを 0 にする load_mc._alpha = 0; // // 時間記録用の変数 time の宣言 var time:Number; // JPEGカウント用の変数 cnt の初期化 var cnt:Number = 0; // // 切り替える時間-フェードアウトする時間 を算出 var timeLag:Number = 1000*timing-1000*100/spd/fps; // // ロードを監視するためのインスタンスを作成 var loadOBJ:Object = new Object(); // MovieClipLoaderクラスのインスタンスを作成 var loadMCL:MovieClipLoader = new MovieClipLoader(); // // JPEGロード完了時の動作を定義 loadOBJ.onLoadInit = function(target:MovieClip):Void { target._alpha = 0; // 変数 time に時間を取得 time = getTimer(); // 1フレーム進む時間毎に随時実行 target.onEnterFrame = function():Void { if (getTimer()-time<timeLag && this._alpha<100) { this._alpha += spd; } else if (getTimer()-time<timeLag) { this._alpha = 100; } else { this._alpha -= spd; if (this._alpha<0) { if (cnt<jpgArr.length-1) { cnt++; } else { cnt = 0; } loadMCL.loadClip(jpgArr[cnt], load_mc); delete this.onEnterFrame; } } }; }; // loadMCL のリスナーとして loadOBJ を登録 loadMCL.addListener(loadOBJ); // 最初の JPEG を load_mc をターゲットにロード loadMCL.loadClip(jpgArr[0], load_mc); ----------------------------------------------
補足
回答ありがとうございます。 なんか、一杯かいてもらってありがとうございます。m(_ _)m えっと、僕の質問が悪かったですかね? FLASH以外から読み込む方法があるなんて知らなかったので、結果的に説明不足となったようですね。重ね重ねスミマセン。 僕が求めているのは、「Flash(FLAのシンボル)内に読み込んだ「a.jpg」「b.jpg」「c.jpg」を、秒数で切り替えていく方法です。 この際、フェードインフェードアウトは置いといて、abc3つの画像があったとして、まずタイムラインがaに来たときにストップ。秒数(例えば10秒)が経過したらまたタイムラインが動く、bの画像のところにくる、ストップ・・・・繰り返し・・・ の様な感じのイメージです。 もちろんもうお分かりかと思いますが、それ以外の方法を知らないので、もっと簡単で格好いい方法があればそれを教えていただきたいのですが、現状、タイムライン0からアルファでフェードインして、aの画像を表示→10秒間タイムラインを増やして、フェードアウト、次の画像をフェードイン・・・というような方法で作成しているので(その方法しか知らない)、かなりタイムラインが長くなるのと、ファイルサイズが増えるのに悩んでいました。 なので、ちょっとでもファイルサイズが小さくなって、簡単にできれば言う事なしです。 私が言いたい事、求めている事、少しでもお分かりになりますでしょうか??(^^;) ほんと、スミマセン。
- hime_mama
- ベストアンサー率32% (1542/4716)
http://iswebmag.hp.infoseek.co.jp/sample140.html http://iswebmag.hp.infoseek.co.jp/sample141.html ↑このあたりが参考になると思います。 スクリプトの記述も載ってますので、コピペで必要部分を書き換えてためしてみて下さい。
- 参考URL:
- http://iswebmag.hp.infoseek.co.jp/sample140.html,http://iswebmag.hp.infoseek.co.jp/sample141.html
補足
回答ありがとうございます。 ・・・これはFLASHのことでしょうか?(^^;) 見る限りJavaScriptのように思えます。 ていうか、JavaScriptもFLASHも同じ?? すいません、そこらへんも良く分かってないので、よければ詳しく解説いただけると助かります。
お礼
度々ありがとうございます。 ご説明内容でよくわかりました。 また別の質問を近々する予定ですので機会がありましたらよろしくお願い致します。 本当にありがとうございました。