- ベストアンサー
外部テキストから画像やリンクを変更するflashバナーを作り方
すみません。 どなたかFLASHに詳しいかたご教授お願い致します。 自社サイトで 下記URLのような画像が切り替わるバナーを作りたいと思っているのですが、 http://www.style-walker.com/ 画像の読み込ませ方がうまくいきません。 画像が頻繁に変わるので外部テキストから変数を読み込み、 画像と、画像をクリックした際のURLを変更したいと思っております。 ネットで調べながら何とか形としてできたのですが、 画像をその都度読み込ませるような形で、回線速度が遅いとバナーが切り替わる度に画像の表示にタイムラグが発生してしまいます。 構成ですが、 バナー画像を読み込ませるインスタンスが bn01、bn02、bn03、bn04とし それをタイムライン上で四つ区切りにし配置しております。 外部テキストファイルには ///////////// &vlink01=http://www.yahoo.co.jp/& &vlink02=http://www.google.co.jp/& &vlink03=http://www.livedoor.com/& &vlink04=http://mixi.jp/& &vbn01=http://www.○○/01.jpg& &vbn02=http://www.○○/02.jpg& &vbn03=http://www.○○/03.jpg& &vbn04=http://www.○○/04.jpg& /////////////// と記載しております。 アクションスクリプトレイヤーには、 bn01、bn02、bn03、bn04それぞれに切り替わる部分に /////////////////// loadVariables ("link.txt",_root); LINK = new LoadVars(); LINK.load("link.txt"); LINK.onLoad = function() { loadMovie(vbn01, _root.bn01); }; //////////////////// /////////////////// loadVariables ("link.txt",_root); LINK = new LoadVars(); LINK.load("link.txt"); LINK.onLoad = function() { loadMovie(vbn02, _root.bn02); }; //////////////////// とそれぞれ四つに一回ずつ記載しております。 リンク先はそれぞれのインスタンスに直接 ///////////////// on (release) { this.getURL(_root.vlink01); } ///////////////// と記載しております。 最初に全ての画像を一気に読み込み、 それぞれのインスタンスに読み込ませるといった 効率のいいスマートなやり方を探しております。 scriptの初心者のため、どなたかご教授お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
AS2ですよね 画像などの読み込み状況を管理するには loadMovieメソッドではなく MovieClipLoaderクラスの loadClipメソッドを使用します MovieClipLoaderクラスのインスタンスは ロード完了時にonLoadCompleteを実行します あとはLoadVarsと同じ要領ですね
その他の回答 (2)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
> 回線速度が遅いとバナーが切り替わる度に画像の表示に > タイムラグが発生してしまいます。 それで? どうしたいのでしょうか? > それぞれのインスタンスに読み込ませるといった > 効率のいいスマートなやり方を探しております。 これと上記の回線速度によるタイムラグと何か関係があるのでしょうか? 効率が良い悪いは別にして, スクリプトに無意味なことが多すぎます。 ///////////// loadVariables ("link.txt",_root); //↑無意味 LINK = new LoadVars(); LINK.load("link.txt"); //↑これで全部がロードされる。なぜ何度もロードするのか。 LINK.onLoad = function() { loadMovie(vbn01, _root.bn01); }; ///////////// 「効率が良い方法」ではなく「普通の方法」をまずはとるべきでしょう。 bn01,bn02,bn03,bn04 が _root の直下にあって 同時に存在する(例えば フレーム1 から全部登場する)ものとします。 その場合のフレームのスクリプト↓ ----------------------- // LoadVarsインスタンス「LINK」を作成 LINK = new LoadVars(); // テキストロード完了時のイベントハンドラメソッドを定義 LINK.onLoad = function() { // i を 1→4 で 1 ずつ加算してループ for (i=1; i<=4; i++) { // _root の btn0? に LINK 内の vbn0? をロード _root["bn0"+i].loadMovie(this["vbn0"+i]); } }; // 外部テキスト「link.txt」をロード LINK.load("link.txt"); ------------------------ bn0? の代表例として bn01 に書くスクリプト↓ -------------- on (release) { getURL(_root.LINK.vlink01); } -------------- ※ ActionScript 1.0 Flash MX 以上で使用可です ※ [ ] は配列アクセス演算子と言います bn0? を順次時間差で登場させる場合であっても 一々何度も link.txt をロードする必要はありません。 例えば LINK.onLoad = function() {} で フレームの再生を開始するなどして, 何某かの bn0? が登場したときにその bn0? に対して bn0?.loadMovie(LINK.vbn0?); を実行すれば良いだけです。 または アルファを 0 にした bn0? を最初から全て登場させ 全ての bn0? にJPEGをロードさせておいて,順次アルファを 100 にするとか。 何度もロードしたり別種のロードをしなくても, LoadVarsインスタンス LINK 内にロードされたデータは居ます。 妙なロードを繰り返すとエラーの発生を促進するだけですよ。 なお MovieClipLoader は Flash MX 2004 以上で使用可です。 ご質問にバージョンが抜けていますから書かれていらっしゃるスクリプトから判断するしかありません。 上記スクリプトは,Flash MX の AS1 内を厳守しました。 以上,回線速度によるタイムラグとはほとんど何も関係ない回答です。
- H240S18B73
- ベストアンサー率65% (190/288)
一度読み込んだURLの画像は キャッシュされます プリローダでどんな形であっても 画像を先に読み込んでおけば 同じURLの画像を使うときは キャッシュから読み込むので swf内で読み込んだものを使い回す という作りにする必要はないと思います
補足
すみません。 可能であれば最初に画像を読み込み、それが終了してから4つのバナーが切り替わるような作りにしたいのですが、scriptに詳しくないため、 無理にとは言いませんが教えていただけないでしょうか?