Flash内で複数のボタンに外部XMLから取得したURLを設定する方法

このQ&Aのポイント
  • XMLから取得したURLをFlash内で設定し、複数のボタンにそれぞれのリンクを設定したい方法について教えてください。
  • 現在の仕組みでは1つのURLしか読み込めないため、新しいURLが複数ある場合に対応できません。
  • 解決策として、XML内に複数のURLを定義し、Flash内でそれらを読み込んでボタンに設定する方法があります。
回答を見る
  • ベストアンサー

xmlから取得したurlをflash内で設定

flash内に設置した複数のボタンに外部xmlから取得したurlを設定したいです。 検索したり過去の質問も見てましたが、いまいちわかりませんでしたのでご教授頂けたらと思います。 現在は↓のようになっています。 これですと1つしか読み込めないので、複数設定してそれぞれのリンクを設定したいと思っています。 わかる方いらっしゃいましたら何卒よろしくお願い致します。 xmlのソース(url.xml) <?xml version="1.0" encoding="UTF-8"?> <top> <menu> <title>url</title> <url>http://www.google.co.jp/</url> </menu> </top> FLASH内のスクリプト(フレーム) function startIndexMenu(success) { if (success == true) { rootNode = index_xml.firstChild; firstMenuNode = rootNode.firstChild; childMenuNode = firstMenuNode.firstChild; updateMenu(childMenuNode); } // end if } // End of the function function updateMenu(newMenuNode) { slideText = newMenuNode.firstChild.nodeValue; slideText_op = newMenuNode.nextSibling; urlNode = slideText_op.firstChild.nodeValue; nextMenuNode2 = firstMenuNode.nextSibling; slideText2 = nextMenuNode2.firstChild.nodeValue; nextMenuNode3 = nextMenuNode2.nextSibling; slideText3 = nextMenuNode3.firstChild.nodeValue; } // End of the function index_xml = new XML(); index_xml.onLoad = startIndexMenu; index_xml.load("url.xml"); index_xml.ignoreWhite = true; ボタンに設定してるスクリプト on (release) { getURL(_root.urlNode, ""); }

  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

「どうするのか」というのは作者の意図で決めることが大半です。 ですから 「こうすべき」とか「これが良い」というような回答はできません。 というわけで 以下に書くことはあくまでも「たとえばの一例」です。 例えば「url.xml」の内容は次のようにします。 ------------------------------ <?xml version="1.0" encoding="UTF-8"?> <top> <menu> <title>Google</title> <url>http://www.google.co.jp/</url> </menu> <menu> <title>Yahoo!</title> <url>http://www.yahoo.co.jp/</url> </menu> <menu> <title>Bing</title> <url>http://www.bing.com/</url> </menu> </top> ------------------------------ この場合, 例えばフレームに書くスクリプトは次のようにします。 ※「制御」→「ムービープレビュー」での   動作検証用にいちいち trace を入れています。   (trace行は本来不要です。) //---------------------------- function startIndexMenu(success) { if (success) { //親のノードを取得 rootNode = index_xml.firstChild; trace("rootNode→ " + rootNode); // //親の持つ子ノードの数を取得 child_len = rootNode.childNodes.length; trace("child_len→ " + child_len); // //子の数だけ i の数を 0 から 1 ずつ加算しながらループ for (var i = 0; i < child_len; i++) { //子ノードを(一時的に)取得 var child = rootNode.childNodes[i]; // //_root の 変数「child○_title」に各 「title」を代入 _root["child" + i + "_title"] = child.childNodes[0].firstChild.nodeValue; trace("_root.child" + i + "_title→ " + _root["child" + i + "_title"]); //_root 変数「child○_url」に各 「title」を代入 _root["child" + i + "_url"] = child.childNodes[1].firstChild.nodeValue; trace("_root.child" + i + "_url→ " + _root["child" + i + "_url"]); } } } index_xml = new XML(); index_xml.onLoad = startIndexMenu; index_xml.load("url.xml"); index_xml.ignoreWhite = true; //---------------------------- そして 例えば1つ目のボタンには次のように書きます。 //---------------------- on (release) { getURL(_root.child0_url, "_self"); } //---------------------- 2つ目のボタンであれば次のように書きます。 //---------------------- on (release) { getURL(_root.child1_url, "_self"); } //---------------------- 3つ目のボタンであれば次のように書きます。 //---------------------- on (release) { getURL(_root.child2_url, "_self"); } //---------------------- ※以上の全スクリプト   ActionScript 1.0   Flash 5(CS5 ではなくてただの5)以上で使用可   Flash Player 5 以上で動作可 今現在のような こういう各ボタンの決め打ちのようなやり方では XMLのデータ量(XMLのリンク個数)の変更によって ボタンの数を変えたりすることはできません。 しかし フレームのスクリプトの方では //親の持つ子ノードの数を取得 child_len = rootNode.childNodes.length; によってデータ数を得て その個数によって forループ の数を変えていますから XMLに応じた動的コンテンツの作成にも一応は対応させているつもりです。 つまり さらに工夫することで, XMLからURLもそのリンク数自体も変えるというような さらなる発展につなげられるような形にはしているつもりです。

marcy-inc
質問者

お礼

ありがとうございます!おかげさまで解決いたしました! 勉強になりました。感謝いたします。

関連するQ&A

  • 外部XMLを使ってFLASHに値を送りたい

    下記のアクションスクリプトは外部XMLより色の値をFLASHに送るものです。 タイトル、コメント、フォントサイズや種類の指定を追加するにはどうすればよいのでしょうか? 宜しくお願いします。 System.useCodepage = true; my_xml = new XML(); my_xml.load("style.xml"); my_xml.ignoreWhite = true; my_xml.onLoad = function(success) { if (success == true) { rootNode = my_xml.firstChild; AValue = rootNode.firstChild.nodeValue; AValue = AValue.substr(1, 6); updatebgcolor(AValue); colorNode = rootNode.nextSibling; $BValue = colorNode.firstChild.nodeValue; $BValue = $BValue.substr(1, 6); updatebgcolor2($BValue); } }; updatebgcolor = function (AValue) { colorObj = new Color(bg_mc); colorObj.setRGB("0x"+AValue); }; updatebgcolor2 = function ($BValue) { colorBObj = new Color(bg2_mc); colorBObj.setRGB("0x"+$BValue); };

  • FlashとXMLとの連動

    初心者ですがよろしくお願いします。 FlashとXMLとを連動させたフォトギャラリーを作成していますが うまく読み込みできずnullになります。 Flash内の機能としては、 ・自動スライド機能 ・画像をクリックするとXML内のURLへジャンプ を入れたいと思ってます。 下記内容を御覧頂きご指摘お願いします。 XML内 <Slides>  <slide>  <jpegURL>images/image1.jpg</jpegURL>   <product_name>名前</product_name>   <product_url>URL</product_url>  </slide>  <slide>  <jpegURL>images/image2.jpg</jpegURL>   <product_name>名前2</product_name>   <product_url>URL2</product_url>  </slide> </Slides> Flash内ActipnScript slides_xml = new XML(); slides_xml.onLoad = startSlideShow; slides_xml.load("slides.xml"); slides_xml.ignoreWhite = true; //自動スライドを定義 function nextSlideload(){ nextSlideNode = currentSlideNode.nextSibling; if (nextSlideNode == null) { break; } else { currentIndex++; updateSlide(nextSlideNode); currentSlideNode = nextSlideNode; } } // Show the first slide and intialize variables function startSlideShow(success) { if (success == true) { rootNode = slides_xml.firstChild; totalSlides = rootNode.childNodes.length; firstSlideNode = rootNode.firstChild; currentSlideNode = firstSlideNode; currentIndex = 1; updateSlide(firstSlideNode); setInterval(nextSlideload,3500) } } function nextSlideload(){ nextSlideNode = currentSlideNode.nextSibling; if (nextSlideNode == null) { break; } else { currentIndex++; updateSlide(nextSlideNode); currentSlideNode = nextSlideNode; } }; // Updates the current slide with new image and text function updateSlide(newSlideNode) { imagePath = newSlideNode.attributes.jpegURL; slideText = newSlideNode.firstChild.nodeValue; loadMovie(imagePath, targetClip); } // Event handler for 'Next slide' button next_btn.onRelease = function() { nextSlideNode = currentSlideNode.nextSibling; if (nextSlideNode == null) { break; } else { currentIndex++; updateSlide(nextSlideNode); currentSlideNode = nextSlideNode; } }; // Event handler for 'Previous slide' button back_btn.onRelease = function() { previousSlideNode = currentSlideNode.previousSibling; if (previousSlideNode == null) { break; } else { currentIndex--; currentSlideNode = previousSlideNode; updateSlide(previousSlideNode); } };

  • FlashにXMLを読み込む

    Flashに外部XMLテキストを読み込みで行き詰まってしまい、質問させて頂きます。XMLテキスト読み込みまではできたのですが、そのテキストにリンクを貼ることができず、困っています。どなたか分かる方がおられましたら教えてください! 【以下XMLになります】 <?xml version="1.0" encoding="UTF-8"?> <topIndex topA="TOPICS" topDescription="テキストテキストテキスト" topB="テキストテキストテキスト" topC="テキストテキストテキスト" topD="テキストテキストテキスト" topE="テキストテキストテキスト"> </topIndex> FlashのASには _global.index_xml = "top.xml"; _global.xmlIndex = new Object(); XML.prototype.ignoreWhite = true; indexXML = new XML(); indexXML.onLoad = XMLLoaded; indexXML.load(index_xml); function XMLLoaded(success):Void { var rootNode:XMLNode = indexXML.firstChild; xmlIndex.topTitle = rootNode.attributes["topTitle"]; xmlIndex.topA = rootNode.attributes["topA"]; xmlIndex.topB = rootNode.attributes["topB"]; xmlIndex.topC = rootNode.attributes["topC"]; xmlIndex.topD = rootNode.attributes["topD"]; xmlIndex.topE = rootNode.attributes["topE"]; _root.topTitle.text = xmlIndex.topTitle; _root.topA.text = xmlIndex.A; _root.topB.text = xmlIndex.B; _root.topC.text = xmlIndex.C; _root.topD.text = xmlIndex.D; _root.topE.text = xmlIndex.E; } と記述しています。 環境はMacでFlash8を使っています。 よろしくお願いします。

  • 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); }

  • xmlから取得したアドレスにリンクを貼りたい。

    xmlから取得したページアドレスをダイナミックテキストに表示、リンクを貼りたいのですがうまくいきません…。 htmlTextを使用してかなり強引に記述しましたがやっぱり不可能でした。(本来アドレスを指定するべきところにノードの参照を直接書いた) dataText.html=true; dataText.condenseWhite=false; dataText.htmlText = <a href='weather_xml.firstChild.childNodes[2].childNodes[1].firstChild.nodeValue'> weather_xml.firstChild.childNodes[2].childNodes[1].firstChild.nodeValue </a> やりたいことは 1・xmlから取得したアドレスをテキスト表示。 2・そのアドレスと同じアドレスのリンクをそのテキストに貼る。 です。 1だけであればtextで表示指定するだけなので出来たのですが 1と2を兼ね合おうとするとどうしてもうまくいきません。 htmlTextではできないのでしょうか? 変数などで解決できるのであればその方法を教えて頂きたいです。 flashのバージョンは8です。 初歩的な質問ですいません。よろしくお願いします。

    • ベストアンサー
    • Flash
  • xmlから作ったサムネールを移動させる

    こんにちは。 flashを勉強中です。XMLからサムネールの一覧を作ろうとして、 なんとかステージに配置するのはできたのですが、サムネールの 数が多いので、マウスの位置によって垂直に移動させる様なことを したいのですが、どうして動かせばよいのかがわからずに困って おります。 アクションスクリプトは以下の様にしております。 このサムネールをMCに埋め込む方法だけでもお教え頂ければ 幸いです。よろしくお願いします。 ----------------------------------------------- myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("data.xml"); myXML.onLoad = function (loaded) {    if (loaded) {      v_rootNode = myXML.firstChild;      v_num = v_rootNode.childNodes.length;      _root.total = v_num;      v_currentPhoto = v_rootNode.firstChild;      v_currentNumber = 0;       for (i=0; i < v_num; i++) {        duplicateMovieClip (icon , "mc_icon"+i, i+1);        path = v_currentPhoto.childNodes[1].firstChild;         _root["mc_icon"+i]._x = 30;         _root["mc_icon"+i]._y = 65 * i + 30;         _root["mc_icon"+i].picture.LoadMovie(path);         _root["mc_icon"+i].title = v_currentPhoto.childNodes[0].firstChild;        v_currentPhoto = v_currentPhoto.nextSibling;        }     } else {      trace ("error occured");   } };

    • ベストアンサー
    • Flash
  • FLASHでXMLを読み込んだときに読み込むまでにundefindがでてしまいます。

    flashで外部のxmlを読み込んでいるのですが、読み込むまでの間にテキストフィールド(v_title)にundefindがでてしまいます。原因がわかりません(><)どなたかぜひ教えてくださいませ。 myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("blog/photodata.xml"); v_titleArray = new Array (); v_xOffset = myBase._x; myXML.onLoad = function (loaded) { if (loaded) { v_rootNode = myXML.firstChild; v_num = v_rootNode.childNodes.length; v_currentPhoto = v_rootNode.firstChild; v_currentNumber = 0; for (i=0; i < v_num; i++) { v_loadURL = v_currentPhoto.childNodes[1].firstChild; v_titleArray.push (v_currentPhoto.childNodes[0].firstChild); v_currentPhoto = v_currentPhoto.nextSibling; f_makeAndLoad (i, v_loadURL); } } else { trace ("error occured"); } }; function f_makeAndLoad (num, path) { myBase.myLoad.duplicateMovieClip ("myLoad"+num, num+1); v_name = eval("myBase.myLoad"+num); v_name._x = 156 * num; v_name._y = 0; v_name.loadMovie (path); myBase.myLoad._visible = false; } myNext.onRelease = function () { _parent._parent._parent.sound1.start(); if (v_currentNumber < v_num-1) { v_currentNumber+=1; }else{ _parent.nextFrame(); } }; myBase.onEnterFrame = function () { this._x += ((-156*v_currentNumber + v_xOffset)-this._x) ; v_title = (unescape(v_titleArray[v_currentNumber])); };

    • ベストアンサー
    • Flash
  • flashでPHPファイル(実際は該当するxmlを呼ぶ)を読み込む方法について

    FLASH(AS2.0)でPHPファイル(実際は該当するxmlを呼ぶ)を読み込むようにするにはどのようにしたらいいのですか? 現状では、ローカルのxmlファイルを読み込むように、 下記のように書いてあります。 var objXML:XML = new XML(); objXML.ignoreWhite = true; objXML.onLoad = function(success:Boolean):Void { if(success) { loadXML(this); } } var menuArray:Array = new Array(); // function loadXML(objXML:XML):Void { var dataNode:XMLNode = objXML.firstChild; var menuNodes:Array = dataNode.childNodes; for(var i:Number = 1; i <= menuNodes.length; i++) { var menuNode:XMLNode = menuNodes[i-1].childNodes; var Name:String = menuNode[0].firstChild.nodeValue; menuArray[i] = { title:Name}; } myVars(menuArray); } objXML.load("sample.xml"); この状態から、外部<http://aaaa/sample.php>URLに アクセスして、PHPファイルを読み込むにはどのようにしたら よいのか全くわかりません。 objXML.load("sample.xml"); 上記の()の中に直接URLを挿入すると、 ローカルでは確認できるのですが、 ファイルをアップすると、まったく読み込めてはいません。 ActionScriptは全くわからないので、ご教授よろしくお願いいたします。

  • 外部XMLのテキスト表示

    WinXP、FLASH MX2004Proで編集しています。 FLASHで外部XMLを読み込んで、テキストを表示させたいと思っています。 XMLファイルはnews.xmlで、 -------------------- <?xml version="1.0" encoding="Shift_JIS" ?> <news> <item> <title>NEWSその1</title> <link>http://www.news01.com</link> </item> <item> <title>NEWSその1</title> <link>http://www.news02.com</link> </item> </news> </xml> -------------------- です。DWで作成したので、Shift-Jisで間違いないと思います。 FLASHでは、ステージ上にダイナミックテキストを配し、インスタンス名・変数名ともに「title_text」にしています。 また、フレームには以下のASを書いています。 -------------------- System.useCodepage = true; newsXML = new XML(); newsXML.load("news.xml"); newsXML.ignoreWhite = true; newsXML.onLoad = function(success) { total = newsXML.firstChild.childNodes.length; title_text.text = newsXML.firstChild.childNodes.firstChild.nodeValue; }; --------------------- 「NEWSその1」が表示されて欲しいところですが、実際には、 「undefind」 です。 ちなみに、 newsXML.onLoad = function(success) { if(success){trace("OK");}else{tarace("NG");} ・・・ としてみたら、「OK」が出力されました。 trace(total); では、「2」が出力されます(あってます)。 しかし、 trace(title_text); は、「undefind」です。 ぜひお力お貸しください。 お願いします。

    • ベストアンサー
    • Flash
  • XMLから読み込んだデータを数値に変換する方法

    こんにちは。 XMLからデータを読み取ってそのpositionの値を元に 画像を動かそうとしています。 ただ、読み込んだ数値が文字と判断されていて、 numberで変換しても、数値にならずに、動かすことが できません。 申し訳ありませんが、お教え頂ければ幸いです。 よろしくお願いします。 -----script------------------------------------------- myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("data.xml"); v_positionxArray = new Array (); v_positionyArray = new Array (); myXML.onLoad = function (loaded) { if (loaded) { v_rootNode = myXML.firstChild; v_num = v_rootNode.childNodes.length; v_currentPhoto = v_rootNode.firstChild; v_currentNumber = 0; for (i=0; i < v_num; i++) { v_positionxArray.push (v_currentPhoto.childNodes[0].firstChild); v_positionyArray.push (v_currentPhoto.childNodes[1].firstChild); v_currentPhoto = v_currentPhoto.nextSibling; } } else { trace ("error occured"); } }; btn_test.onRelease = function () { if (v_currentNumber < v_num-1) { v_currentNumber+=1; picture_x = Number(v_positionxArray[v_currentNumber]); picture_y = Number(v_positionyArray[v_currentNumber]); } }; picture.onEnterFrame = function () { this._x += picture_x; this._y += picture_y; } -----xml data-------------------------------------- <data> <member> <positionx>-591</positionx> <positiony>-130.7</positiony> </member> </data>

    • ベストアンサー
    • Flash

専門家に質問してみよう