- 締切済み
XML読み込みのテキストが表示されません
FLASHで簡単な写真のスライドショーを作っています。 いろいろな例を参考に下記の段階まで作業を進めましたが、イメージは表示されたものの、どうしてもXMLからのテキストが読み込めず困っています。いろいろと調べてはみましたが、初心者ゆえ一人では解決できそうにありません。どなたか目を通して間違いを指摘していただけませんでしょうか?よろしくお願いします。 XMLファイルの記述: <?xml version="1.0" encoding="UTF-8"?> <Slides> <slideNode jpegURL="photos/photo1.jpg">#1 ABCDE</slideNode> <slideNode jpegURL="photos/photo2.jpg">#2 ABCDE</slideNode> <slideNode jpegURL="photos/photo3.jpg">#3 ABCDE</slideNode> </Slides> </xml> ActionScriptの記述: myXML.load("path_to_xml/data.xml"); var slides_xml = new XML(); slides_xml.load("slides.xml"); slides_xml.ignoreWhite = true; slides_xml.onLoad = startSlideShow; function startSlideShow(success) { if (success == true) { rootNode = slides_xml.firstChild; totalSlides = rootNode.childNodes.length; firstSlideNode = rootNode.firstChild; currentSlideNode = firstSlideNode; currentIndex = 1; updateSlide(firstSlideNode); } } function updateSlide(newSlideNode) { imagePath = newSlideNode.attributes.jpegURL; slideText = newSlideNode.firstChild.nodeValue; loadMovie(imagePath, targetClip); }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- z1z1z1z1z1
- ベストアンサー率0% (0/0)
http://www.lanblo.com/elk/?p=55 ここを参考にしてみては?
- 参考URL:
- http://www.lanblo.com/elk/
- DPE
- ベストアンサー率85% (666/776)
多分ですけれど、 ・FlashとXMLとの連動 http://okwave.jp/qa3670486.html ↑この質問の質問者様と、同じサンプルをご参考になさったのではないでしょうか。 スクリプトの仕組みを#2で説明しておりますので、よろしければご参照ください。 No.3670486 はこのサンプルで独自の構造の XML を読み込ませて使う話のため、今回の件とは関係ない話が混ざっていて分かりにくく恐縮なのですが、主に最初の仕切り線 ----- から次の ***** までの間(^^;)が、XML からスライドに必要な情報を取り出す部分の説明になっています。 その下の updateSlide 関数と XML の構成との関係についても、よろしければご一読なさってください。 ----------------------------------------------------------- さて、今回の件ですが。 ご提示の XML とスクリプトをコピーし、ステージに next_btn と back_btn というインスタンス名のボタンを作ってざっと試したところ、updateSlide 関数内で変数 imagePath に画像の URL( photos/photo1.jpg など)、slideText にテキスト( #1 ABCDE など)が格納されていました。 つまり、スクリプトや XML の書き方に誤りはなく、スライドに必要な情報は画像の URL ・テキストともに正常に取得できているものと思われます。 おそらくですが、テキストが所定の場所に表示されないために、テキストが取得できていないのではと思っていらっしゃるのではないでしょうか。 XML から必要な情報を取得できていて、画像は表示できるにも関わらずテキストが表示されないとなると、怪しいのはテキストを表示する部分ということになります。 スクリプトにテキストを表示する処理が含まれていないところから察するに、ダイナミックテキストのテキストフィールドを作り、「プロパティ」パネルにある「変数:」の項目に変数名を指定して表示しているかと思います。 変数名を指定してテキストを表示する手法は旧式になりましたが、その話はとりあえず置いておきましょう。 XML から取得したテキストは、slideTextという名前の変数に入ります。 この変数の値を表示するので、「変数:」の項目にはslideTextと、変数の名前を正確に入力します。 大文字・小文字や全角・半角(全て半角です)の誤り、不要なスペース等の混入、タイプミスなどの些細な誤りがないか、今一度ご確認ください。 テキストフィールドのタイプは”ダイナミックテキスト”にします。 タイプは「プロパティ」パネルの左上にあるコンボボックスで設定します。 このコンボボックスで”ダイナミックテキスト”が選択されているかどうかなども、合わせて確認してみてください。 書籍か解説サイトで紹介されているサンプルであれば、ムービークリップやテキストフィールドの配置などスクリプト以外の部分も、作り方の手順が説明されているかと思います。 そちらの説明と照らし合わせてみて、飛ばしてしまったところ・抜けていること・操作の誤りがないかどうかも、よく確認してみてください。 スクリプトに間違いはなくても、例えばテキストを表示するためのテキストフィールドを作り忘れていたり、テキストフィールドの設定が間違っていたなど、些細なミスが原因で上手くいかないこともあるのです。 さしあたって、スクリプトと XML の書き方に特に問題はなさそうです。 スクリプトだけを見ていても解決できないと思いますよ。
補足
スクリプトの作動確認までしてくださったようで、ありがとうございます。 テキストフィールドの設定は確認したのですが、やはり表示されませんでした。 ダイナミックテキストで、変数の名前もslideTextです。フォントは_sansで、文字数に足りるようにフィールドも余分によっています。 しかしXML とスクリプトがスライドに必要な情報が得られているのならば、ここに問題があるということになるのですね。もう一度問題の洗い出しをしたいと思います。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1 です。 >> 教えて頂いたスクリプトを試してみましたが、文字の値は取得出来ませんでした。。 と言いますかですね, スクリプトの内容は一切変えてないのですよ。 わかっていらっしゃいますか? つまり文字の値を取得する方法など書いていません。 trace関数を用いて, 1行1行のスクリプトで何が取得されているのかを 「制御」→「ムービープレビュー」で試してみてくださいという趣旨のことを書いたのです。 ちなみに私の場合はちゃんと取得できましたよ。 ただ, 取得できたものが意図したものかどうかは知りませんと書いているのです。 繰り返します。 「制御」→「ムービープレビュー」で試してみてください ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 他の部分も繰り返します。 > つまり 『問題点を切り分けて考える』 のが最低のスタートラインです。 > > ・1行1行検証しながら作成する > ・問題を切り分けて1つずつ問題を克服する > > これをすればたいていの場合おのずと問題は解決します。 > また,解決しなかったとしても > 「何を調べるべきか」 または 「何を訊くべきか」 が見えます。 この文の意味をわかっていらっしゃらないので, さらなる問題点を一緒くたに質問されていると思います。 > ・問題を切り分けて1つずつ問題を克服する ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- BlurFiltan
- ベストアンサー率91% (1611/1754)
> myXML.load("path_to_xml/data.xml"); & > slides_xml.load("slides.xml"); ここを見ると 「myXML」 と 「slides_xml」 という XMLクラスのインスタンスがあって, それぞれのインスタンスに 「path_to_xml/data.xml」 と 「slides.xml」 をロードすることになっています。 いったいどういうことでしょうか? また提示されている XML は 「path_to_xml/data.xml」 or 「slides.xml」 のどちらなのでしょうか? > どなたか目を通して間違いを指摘していただけませんでしょうか? 何がしたいのかがわからないので間違いなどわかりません。 すべてが正解かもしれませんし全てが間違いかもしれません。 とりあえず 任意のフォルダ ├ ○○.fla (○○.swf を作成するファイル) ├ ○○.swf └ slides.xml (書かれていらっしゃるXML) という構造にして 次のスクリプトを書いて ------------------------------------------------- // myXML.load("path_to_xml/data.xml"); ←とりあえず無視 var slides_xml = new XML(); slides_xml.load("slides.xml"); slides_xml.ignoreWhite = true; slides_xml.onLoad = startSlideShow; function startSlideShow(success) { if (success == true) { rootNode = slides_xml.firstChild; trace("●rootNode=" + rootNode); totalSlides = rootNode.childNodes.length; trace("●totalSlides=" + totalSlides); firstSlideNode = rootNode.firstChild; trace("●firstSlideNode=" + firstSlideNode); currentSlideNode = firstSlideNode; trace("●currentSlideNode=" + currentSlideNode); currentIndex = 1; updateSlide(firstSlideNode); } } function updateSlide(newSlideNode) { trace("\n---updateSlide---\n"); imagePath = newSlideNode.attributes.jpegURL; trace("●imagePath=" + imagePath); slideText = newSlideNode.firstChild.nodeValue; trace("●slideText=" + slideText); loadMovie(imagePath, targetClip); } ------------------------------------------------- そして 「制御」→「ムービープレビュー」で 思った通りの値(文字列)が取得できているかどうかを調べてみられてはいかがでしょうか。 こういうものは, 1行ずつ動作検証しながら作成して行くのが普通の作成行程です。 あと XML などに気を取られないことも大切です。 「何かの値を取得する」 と 「取得した値によって何かをする」 というのは全く別問題です。 つまり 『問題点を切り分けて考える』 のが最低のスタートラインです。 ・1行1行検証しながら作成する ・問題を切り分けて1つずつ問題を克服する これをすればたいていの場合おのずと問題は解決します。 また,解決しなかったとしても 「何を調べるべきか」 または 「何を訊くべきか」 が見えます。 --- --- --- あと,どう見ても ActionScript1.0 をご使用で Flash MX 以上をお持ちですね。 そこまではわかりますがそれ以上はわかりません。 Flash は バージョン によって仕様やできることできないことがすざまじく変わります。 またある動作をさせる場合も 「バージョンA では正解」 ,「バージョンB では間違い」 というようなことはゴロゴロ存在します。 ご質問で バージョン の記述などが抜けていますから, 仮に何をしたいのかがわかったとしても,答えにくいか回答不可能に近いと思います。
補足
初心者のうえに今回質問も初めてで、容量を得ず失礼しました。 教えて頂いたスクリプトを試してみましたが、文字の値は取得出来ませんでした。。 ActionScript1.0&2.0を選び, Flash CS3を使用しています。 使用しているXMLのファイル名は、「slides.xml」です。 nextボタンと backボタンで写真が入れ替わるように作っています。そのスクリプト部分も書き加えた方がいいのでしょうか。この操作は一応出来ています。 next_btn.onRelease = function() { nextSlideNode = currentSlideNode.nextSibling; if (nextSlideNode == null) { break; } else { currentIndex++; updateSlide(nextSlideNode); currentSlideNode = nextSlideNode; } }; back_btn.onRelease = function() { previousSlideNode = currentSlideNode.previousSibling; if (previousSlideNode == null) { break; } else { currentIndex--; currentSlideNode = previousSlideNode; updateSlide(previousSlideNode); } }; よろしくお願いします。
補足
ありがとうございます。早速試してみます。