- ベストアンサー
FLASHとXMLのスライドショーにリンクを付ける方法
- FLASHでスライドショーを作成し、更新をしやすくするためにXMLを使用する方法についてご教示ください。
- スライドショーの画像をクリックすると指定のURLへジャンプできるようにする方法についてもお教えください。
- javascriptを使用せずにフェードインアウトで画像を切り替える一般的な方法について知りたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
つい先日, 私がこちらのご質問でも回答したのですが↓, 「ニュースティッカーを作る」 http://okwave.jp/qa3638201.html _root の フレーム1 で XML をロードして, フレーム2 以降で,書かれていらっしゃるようなアニメーションや動作をさせれば比較的簡単にできるのではないかと思います。 つまり 「後々フェードじゃなく、色々なエフェクト」 もかけやすくなると思います。 文字だけの説明でわかりにくいかもしれませんが, 以下では,その方法例の1つを回答します。 ちなみに Flash のバージョンを書かれていらっしゃいませんね。 以下で使用している ActionScript は 1.0 ですが, 作成するには Flash MX 2004 以降のバージョン(MX2004,8,CS3)が必要です。 SWF も Flash Player 7 以上にパブリッシュする必要があります。 ◎外部ファイル 外部XMLファイル…ファイル名「my_data.xml」 HTMLファイル…ファイル名「AA.html」~「EE.html」 ◎Flash内に手動で作成するインスタンス 1~5を表示するテキストフィールド…インスタンス名「number_txt」 JPEGをロードするMC…インスタンス名「load_mc」 --------外部XML「my_data.xml」------------------------- <Slides> <slideNode jpegURL="img/01.jpg" linkURL="AA.html">1</slideNode> <slideNode jpegURL="img/02.jpg" linkURL="BB.html">2</slideNode> <slideNode jpegURL="img/03.jpg" linkURL="CC.html">3</slideNode> <slideNode jpegURL="img/04.jpg" linkURL="DD.html">4</slideNode> <slideNode jpegURL="img/05.jpg" linkURL="EE.html">5</slideNode> </Slides> ---------------------------------------------------- タイムラインの構造 ////////////////////////////////////////////////////////////// 1 レイヤー |○|○ |○| ←スクリプト レイヤー |○|●//////////////////////| ←number_txt レイヤー |○|●---->|●/////|●---->|●| ←load_mc フェードイン フェードアウト ////////////////////////////////////////////////////////////// ---------フレーム1のスクリプト--------------------- // ストップ stop(); // カウント用変数 cnt の初期値を設定 cnt = -1; // XMLインスタンスの作成 myXML = new XML(); // 余分な空白などを削除 myXML.ignoreWhite = true; // XMLデータロード時の動作定義 myXML.onLoad = function() { // 変数 total にノードのトータル数を取得 _root.total = this.childNodes[0].childNodes.length; // フレーム2でストップ _root.gotoAndStop(2); }; // 外部 XML ファイルのロード myXML.load("my_data.xml"); --------------------------------------------- ---------フレーム2のスクリプト--------------------- // カウント用変数がノード数-1より小さいとき if (cnt<total-1) { // カウントを 1 加算 cnt++; } else { // それ以外は 0 に戻す cnt = 0; } // テキストフィールド 「number_txt」に 番号を表示 _root.number_txt.text = myXML.childNodes[0].childNodes[cnt].firstChild.nodeValue; // MovieClipLoaderクラスのインスタンスを作成 myMCL = new MovieClipLoader(); // ロード監視用のインスタンスを作成 myObj = new Object(); // JPEG ロード完了時 myObj.onLoadInit = function(target_mc) { // load_mc にリンクを設定 target_mc.onRelease = function() { getURL(myXML.childNodes[0].childNodes[cnt].attributes.linkURL, "_blank"); }; // 再生開始 _root.play(); }; // myMCL のリスナーとして myObj を登録 myMCL.addListener(myObj); // JPEG をロード myMCL.loadClip(myXML.childNodes[0].childNodes[cnt].attributes.jpegURL, load_mc); --------------------------------------------- ---------最終フレームのスクリプト------------------- gotoAndStop(2); --------------------------------------------- ・外部XML「my_data.xml」について XMLはHTMLと違って非常に自由度が高いデータ言語です。 ノードのattributes(属性)も自分で勝手に決めれば良いだけです。 上の例でも, linkURL="AA.html" のように,勝手に linkURL という属性を作って,そこに "AA.html" のような値を代入しています。 自分さえそのルールを理解していれば, XML.ノード.attributes.linkURL のようにしてその値を Flash から参照することができます。 ・フレーム2のスクリプトについて MovieClipLoaderクラスを使用するのに Flash MX 2004 以降が必要です。 ・その他 XMLを扱うスクリプトはどうしても横長になります。 ノードを変数化すれば短くできるのですが, それをするとわかりにくくなると思ったので変数化はしていません。 改行してるように見えて改行は入っていない部分もあるのではないかと思いますので, スクリプトをそのまま見るのではなく, 一度テキストエディタやFlashのActionScriptエディタにコピペして見てもらう方が良いと思います。
お礼
回答ありがとうございます。 そうでした、バージョンを書いてませんでしたね。申し訳ないです。 バージョンは8です。 早速、試してみたのですがどうもうまくいかず画像を読み込んでくれませんでした。 getURLもできてなかったので、ちゃんとXMLを読み込んでないのかもしれません。 うーん、書き方が悪かったのでしょうか・・・ もう少し、試行錯誤してみようと思います。 わかりやすい説明をどうもありがとうございました。