- 締切済み
[actionscript] XMLを使ってスライドショーを作成しましたが・・・
こんにちは。 FLASHアクションスクリプト初心者です。 XMLを使ってスライドショーを作成した外部SWFを メインのSWFに読み込ませたいのですが、うまくいかなくて困っています。 構成としては、メインとなるSWFファイルがあり、 そこに外部にある各ページのSWFファイルを読み込んでいます。 現在、メインのSWFファイルに読み込ませるページAのSWFファイルを作成ました。 その外部SWFファイルには、こちらのサイト (http://www.oman3d.com/tutorials/flash/slideshow/index.php) を参考にして、XMLを使って読み込んだ画像で スライドショーを作成しました。 この外部SWFファイルをメインのSWFファイルに読み込ませたのですが、 メインSWFをパブリッシュして確認したところ、 画像スライドショーの部分が表示されませんでした。 (テキストやMCなどは表示されます。) 外部SWFのパブリッシュプレビューでは表示されています。 actionscriptは、外部SWFの一フレーム目に記述されています。 ****actionscript**** import mx.transitions.Tween; import mx.transitions.easing.*; var myShowXML = new XML(); myShowXML.ignoreWhite = true; myShowXML.load("slideshow.xml"); myShowXML.onLoad = function() { _root.myWidth = myShowXML.firstChild.attributes.width; _root.myHeight = myShowXML.firstChild.attributes.height; _root.mySpeed = myShowXML.firstChild.attributes.speed; _root.myImages = myShowXML.firstChild.childNodes; _root.myImagesNo = myImages.length; createContainer(); callImages(); }; function createContainer() { _root.createEmptyMovieClip("myContainer_mc", 1); myContainer_mc.lineStyle(5, 0x000000, 100); myContainer_mc.lineTo(_root.myWidth, 0); myContainer_mc.lineTo(_root.myWidth, _root.myHeight); myContainer_mc.lineTo(0, _root.myHeight); myContainer_mc.lineTo(0, 0); myContainer_mc._x = (Stage.width - myContainer_mc._width) / 2; myContainer_mc._y = (Stage.height - myContainer_mc._height) / 2; } function callImages() { _root.myMCL = new MovieClipLoader(); _root.myPreloader = new Object(); _root.myMCL.addListener(_root.myPreloader); _root.myClips_array = []; _root.myPreloader.onLoadComplete = function(target) { _root.myClips_array.push(target); target._alpha = 0; if (_root.myClips_array.length == _root.myImagesNo) { _root.target_mc = -1; moveSlide(); myShowInt = setInterval(moveSlide, (_root.mySpeed * 1000) + 1000); } }; for (i = 0; i < _root.myImagesNo; i++) { temp_url = _root.myImages[i].attributes.url; temp_mc = myContainer_mc.createEmptyMovieClip(i, myContainer_mc.getNextHighestDepth()); _root.myMCL.loadClip(temp_url, temp_mc); } } function moveSlide() { current_mc = _root.myClips_array[_root.target_mc]; new Tween(current_mc, "_alpha", Strong.easeOut, 100, 0, 1, true); _root.target_mc++; if (_root.target_mc >= _root.myImagesNo) { _root.target_mc = 0; } next_mc = _root.myClips_array[_root.target_mc]; new Tween(next_mc, "_alpha", Strong.easeOut, 0, 100, 1, true); } 宜しくお願いいたします!
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1です。 最初のご質問, > XMLを使ってスライドショーを作成した外部SWFを > メインのSWFに読み込ませたいのですが、うまくいかなくて困っています。 と, > このスライドショーを親SWFの中にあるムービークリップの中に入れる > (作成する)必要がでてきてしまいました。 は同じ事のように思えますが...(同じ対処法でできる)。 某mixiなど("など" は悪い意味ではありません)と, マルチポスト("マルチポスト" は悪い意味です)などしているのでだんだん混乱しているだけではありませんか? 聖徳太子ではないのですから。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
****actionscript**** のすぐ後(すぐ下)に, this._lockroot = true; と書けばうまく行きませんか? ロードさせると,親SWF の _root に 子SWFの _root がズレますよ。 なぜなら 親SWF の中では 子SWF は1ムービークリップですから。 あとファイルの構造も関係しますが, それは書かれていないのでわかりません。
お礼
BlurFiltanさん アドバイスありがとうございました! 子SWFの一番最後のフレームに上記のアクションスクリプトを書きなおしたら、親SWFで表示することが出来ました! 最後のフレームにきちんとかかないとダメなんですね・・・。 ちょっと考えれば分かることなのに、気付きませんでした。 すみません。 本当にありがとうございました!!!! そして、ここにきてもう一つ問題が起きてしまいました。 このスライドショーを親SWFの中にあるムービークリップの中に入れる(作成する)必要がでてきてしまいました。 親SWFのasレイヤーに上のスクリプトを書き、 スクリプトの_rootのところを_root.mcの名前 に変更してみたのですが、 表示されませんでした。 たびたびの質問で申し訳ございませんが、知恵をかして下さい!
補足
BlurFiltanさん アドバイスありがとうございます! this.lockroot = true; と書いてみましたが、やはり表示されませんでした。 子SWFファイルの構造としては、asレイヤーの一フレーム目に上記のasが書いてあり、asレイヤーの最後のフレーム(15フレーム目)にstop();が書かれています。 その他のレイヤーで文字や画像(スライドショーではない動かない画像)にTWEENでアルファをかけてあります。 親SWFファイルでは、ボタンAを押したときに空ムービークリップload_mcに子SWFを読み込ませるアクションスクリプトが書いてあります。 → load_mc.loadMovie("xxx.swf"); 環境を記述するのを忘れてしまいましたが、 WindowsXP/FlashMX/AS2.0 です。 宜しく御願い致します。