Flashの変数をXMLで管理する方法

このQ&Aのポイント
  • Flashで変数をXMLで管理する方法について教えてください。
  • XMLでFlashの変数を管理することはできるのでしょうか?具体的なサンプルも含めて教えてください。
  • Flashの変数をXMLで管理する方法を教えてください。Flash CS4での実現方法が知りたいです。
回答を見る
  • ベストアンサー

XMLでFlashの変数を管理できませんか?

XMLでFlashの変数を管理できませんか? ただいまFlashの変数(例えば、リンク先、読込む画像のURLや変数の数値など)をXMLで管理できたらいいなぁと思いサンプルを作成したのですがXMLに記述したテキストを変数に代入するとこまではできたのですが、その変数をFlash内で自由に扱えません。 どうしたらよいでしょうか?作成環境はActionScript3、Flash CS4です。 ■XML:var_xml.xml内は以下のように記述しています。 <?xml version="1.0" encoding="UTF-8"?> <move>  <id ex="Slow Speed" speed="1" />  <id ex="Normal Speed" speed="3" />  <id ex="Fast Speed" speed="5" />  <id ex="Very Fast Speed" speed="8" /> </move> ■Flash(w:700xh:100)内は ルートの1フレーム目に stop(); XML.ignoreComments=true; XML.ignoreWhitespace=true; XML.ignoreProcessingInstructions=true; var myRequest:URLRequest=new URLRequest("./var_xml.xml"); var myLoader:URLLoader=new URLLoader(); myLoader.load(myRequest); myLoader.addEventListener(Event.COMPLETE, xSetText); function xSetText(eventObject:Event):void { var varXML:XML=XML(myLoader.data); var speed:int=int(varXML.id[2].@speed);←ここで変数作る gotoAndPlay(2); } ルートの2フレーム目はStop();を記述して ステージにはMovieClip(BaseMC)が1個置いてあります。そのMovieClip(BaseMC)の1フレーム目には以下のようにASを記述しています。 var MC:MovieClip = new moveMC();←適当な図形が一つ置いてあるMC MC.x=0; MC.y=5; addChild(MC); addEventListener(Event.ENTER_FRAME, MoveFunc); function MoveFunc(event:Event):void { MC.x+=speed;←ここにさっきのXMLから引っ張って代入した変数を使いたい if (MC.x>700) { MC.x=0; } } 上記のようなFlashを作成したのですが、エラーがでてしまいます。もしこんな感じでXMLを利用して変数を管理できたら便利だと思うのですが、できるのでしょうか? 検索してもギャラリーをXMLで管理するとかでるのですが、XMLの読込完了に実行される関数内で変数にURLを代入とかtrace(~);で出力してとか、知りたい情報が手に入らないのでどなたか教えていただけませんか?お願いします。

  • Flash
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
回答No.2

#1です そういえばそうですね・・・ じゃあ関数のなかで変数を宣言せずに 外で宣言してなかでは代入だけすれば 解決するんじゃないでしょうか var speed:int var varXML:XML=XML(myLoader.data); speed=int(varXML.id[2].@speed); gotoAndPlay(2); }

yoyoyoiyoi
質問者

補足

var speed:int;←ここで変数宣言して function xSetText(eventObject:Event):void { var varXML:XML=XML(myLoader.data); speed=int(varXML.id[2].@speed);←ここで代入 gotoAndPlay(2); } あっこれでできました。 ちゃんとMovieClip(root).speedも認識されました。 ありがとうございます。

その他の回答 (1)

回答No.1

それは単純にrootの1フレーム目のspeedは 2フレーム目に配置されたBaseMCから見たら parent.speedだからなんじゃないでしょうか・・ とりあえずどの段階でつまずいてるのか 確認する為にxSetTextの時点で一回 trace(speed)してみたりしてみた方が いいかもしれないですよ

yoyoyoiyoi
質問者

補足

>parent.speedだからなんじゃないでしょうか・・ いえ、そうではないと思います。 実際speedをMovieClip(root).speedでやっても変数として認識されません。 理由はfunction xSetText内で定義した変数なのでグローバル変数ではなくローカル変数だからだと思います。trace(speed);ですが、問題なくトレースできますよ。 なにかもっと違うやり方があるのでしょうか?

関連するQ&A

  • AS3:ルートの変数とムービークリップ内の変数について

    AS3:ルートの変数とムービークリップ内の変数について ルートのタイムラインで設定した変数var RootVarがあるとして、これをあるムービークリップMCからMovieClip(root).RootVarで読み取って、MC内で何か処理をしたときMovieClip(root).RootVar++;とやってもルートのRootVarの値は変わりません。 例えば、 ■ルートのタイムライン1フレームに記述 var RootVar:uint; if(RootVar>=3){ trace("できた!!"); } ■ステージにあるムービークリップMCのタイムライン1フレームに記述 MovieClip(root).RootVar=0; var AddTimer:Timer = new Timer(1000,3); AddTimer.addEventListener(TimerEvent.TIMER,AddNum); AddTimer.start(); function AddNum(eventObject:TimerEvent):void { MovieClip(root).RootVar++; } ルートからムービークリップ、ムービークリップからルートへ変数に値を渡したり受け取ったりはできなのでしょうか? 変数の扱い方が問題なのでしょうか?よろしくお願いします。 環境:AS3、Flash CS4

    • ベストアンサー
    • Flash
  • AS3.0で取得した外部XMLの文字の一部に色付け

    Flash professional CS5を使用してAS3.0で記述しています。 外部XMLに文章が入っており,それを作成したテキストフィールドに入れます。 そして,その文章の一部の必要なところだけ文字の色を変えたいと考えています。 テキストボックスや文章を細切れにするのは大変だと思うのですがなにかやり方があるのでしょうか? プロパティインスペクタで細かい設定もできないですし; 例文として ・彼は何万人もの参加者から選ばれた というものを使うとします。 ここで 彼は何万人もの<sentence style="color:#0000FF;">参加者</sentence>から選ばれた のようにしてもflash(AS3.0)ではこの色のタグなどは識別不可能なのでしょうか? (stringなので単に文字列として認識されないとか。。) XML用のスクリプトはこのように記述しました。 var loader:URLLoader = new URLLoader(); var urlReq:URLRequest = new URLRequest("sample.xml"); loader.load(urlReq); loader.addEventListener(Event.COMPLETE, onLoaded); function onLoaded(eventObj:Event):void{ var item:XML; var xmlObj:XML = new XML(loader.data); var wordList:XMLList = xmlObj.sentence; item = wordList[0]; test_txt.text = item.text(); } よろしくお願いいたします。

  • as3 getChildByNameに変数を利用する

    ※実際にやりたいことは違うのですが、 分かりやすくするため簡易的にしています。 ステージに配置された2つのインスタンスを y=300に移動するというものを作りたいと思っています。 (実際には100以上になるので動的に生成したいです。) var num:int = 2; var _mc:Array = []; var _mcName:Array = []; for(var i=0; i < num; i++){ _mc.push("test_mc"+i); _mcName.push("test_mc"+i); } for(var n=0; n < num; n++){ _mc[n] = new MovieClip; _mc[n].addEventListener(Event.ENTER_FRAME, function() { MovieClip(getChildByName(_mcName[n])).y = 300; }); } 上記を実行すると下記のエラーが出ます。 TypeError: Error #2007: パラメータ name は null 以外でなければなりません。 at flash.display::DisplayObjectContainer/getChildByName() at MethodInfo-1() 下記のように並べて記述するとうまくいくのですが・・・・ これを100個以上も書くのはばかばかしいので。。。 _mc[0] = new MovieClip; _mc[0」.addEventListener(Event.ENTER_FRAME, function() { MovieClip(getChildByName(_mcName[0])).y = 300; }); _mc[1] = new MovieClip; _mc[1」.addEventListener(Event.ENTER_FRAME, function() { MovieClip(getChildByName(_mcName[1])).y = 300; }); ご教授お願いいたします!

    • ベストアンサー
    • Flash
  • as3 変数のスコープについて

    xmlの読み込みをしていますが、 最後のtraceで内容が表示されません。nullになります。 var myXML:XML; var imgSrc:String ; var url:URLRequest = new URLRequest("test.xml"); var xmlLoader:URLLoader = new URLLoader(); xmlLoader.dataFormat = URLLoaderDataFormat.TEXT; xmlLoader.load(url); xmlLoader.addEventListener(Event.COMPLETE, comp); function comp(event:Event):void { myXML = XML(xmlLoader.data); imgSrc = myXML.img[0]; } trace(imgSrc);←ここがnullです。 function内でtraceすると問題なく表示されるのですが、 一体どうしてでしょうか。 ご教授お願いいたします。

    • ベストアンサー
    • Flash
  • PEAR XML_Query2XMLを利用したPHPからFlash(AS3)へのXMLデータの渡し方について。

    毎度お世話になっております。 前回させていただいた質問で、PHPからFlashへのデータ受け渡しをしたいと考えていたところ、XML形式がいいと教えていただき、試していました。 FlashのただのXMLファイルの読み込みはでき、PHPのPEAR XML_Query2XMLを利用してデータベースのデータをXMLに整形することも出来ました。 しかし、その後の連結的な操作が分からず戸惑っております。 お時間があるときでよろしいので、何を使ったらよいかなどアドバイス等を頂ければと思います。 よろしくお願いします。 環境 Flash CS3(AS3) PHP5.2.6 MySQL5.1.29 Apache2.2.10 ・PHPの今のところのプログラム <?php // include required files include 'XML/Query2XML.php'; include 'MDB2.php'; try { // initialize Query2XML object $q2x = XML_Query2XML::factory(MDB2::factory('mysql://ユーザ名:パスワード@localhost/データベース名')); // generate SQL query // get results as XML $sql = "SELECT * FROM table名"; $xml = $q2x->getFlatXML($sql); // send output to browser header('Content-Type: text/xml'); $xml->formatOutput = true; echo $xml->saveXML(); } catch (Exception $e) { echo $e->getMessage(); } ?> ・AS3の今のところのプログラム System.useCodePage = true; // 外部XMLはURLLoaderで読み込む var myLoader:URLLoader = new URLLoader(); myLoader.addEventListener(Event.COMPLETE, completeData); myLoader.load(new URLRequest("test.xml")); // 読み込み完了後の処理 function completeData(event:Event):void { // 読み込んだ文字列をmyXMLに入れる var myXML:XML = new XML(myLoader.data); // データのnameとpriceの値をリストアップ表示 trace(myXML.drink[1].name); for (var i = 0; i < myXML.drink.length(); i++) {; //ダイナミックテキストでi番目を表示 db.text = myXML.drink[i].name trace(myXML.drink[i].name); trace(myXML.drink[i].@price); } } よろしくお願いします^^

    • ベストアンサー
    • PHP
  • 外部SWFの制御、プロパティにアクセスについて

    制作環境:Flash CS5、ActionScript3 外部SWFのプロパティ、フレームの制御について悩んでいます。 まず、外部SWFを読み込むSWF:parent.swf、読み込まれるSWF:child.swfがあるとします。 parent.swfはタイムライン1フレームだけで以下を記述しています。 var swfUrlReq:URLRequest=new URLRequest("./child.swf"); var fileLoader:Loader=new Loader(); var mc:MovieClip=new MovieClip(); fileLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeSwf); fileLoader.load(swfUrlReq); function completeSwf(eventObject:Event):void { mc=fileLoader.content as MovieClip; mc.stop(); addChild(mc); trace(mc.word); } child.swfでは総フレーム55くらいで、添付の画像のように左から右に移動して終わるだけのムービーです。1フレーム目にはvar word:String="読めた!!"; 最後の55フレームにはstop();を記述しています。 でいざパブリッシュしてみるとmc.stop();が効かず勝手にムービーが再生され、おまけに以下の「Error #1069: _01_fla.MainTimeline__Preloader__ にプロパティ word が見つからず、デフォルト値もありません。」のエラーでてしまいます。 どうやったらフレームを制御でき、child.swf内部に設定した変数wordを読めるでしょうか?ネットでいろいろ検索引っかかったのですがどれも解決にはなりませんでした、どなたか教えてください、よろしくお願いします。

    • ベストアンサー
    • Flash
  • ActionScript3で複数のXMLを順番に読み込めずに最後のXM

    ActionScript3で複数のXMLを順番に読み込めずに最後のXMLだけ読んでしまいます。 あるサイトからXMLファイルを順番に読み込んで その中のデータを順番に処理する(trace(hoge);で表示する) スクリプトを書いていますが、なぜか最後のlist3.xmlの データだけが表示されてしまいます。 URLが複数だと、list1.xmlとlist2.xmlの部分だけ 以下のエラーが出るのです。 TypeError: Error #1010: 条件は未定義であり、プロパティがありません。 at _fla::MainTimeline/xmlLoad() at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/flash.net:URLLoader::onComplete() URLが1つだとエラーがでないので益々意味が分からず 混乱しています。何故か分かる方は教えて欲しいです。 宜しくお願いします。 //■■■■■■■■■■■■■■■スクリプトここから import flash.net.URLLoader; import flash.net.URLRequest; var xmlUrl = new Array(); xmlUrl[0] = "http://hogehoge.com/list1.xml"; xmlUrl[1] = "http://hogehoge.com/list2.xml"; xmlUrl[2] = "http://hogehoge.com/list3.xml"; var rss:XML; var xmlData:URLLoader; for each (var k:String in xmlUrl){ xmlData = new URLLoader(); xmlData.load(new URLRequest(k)); xmlData.addEventListener(Event.COMPLETE,xmlLoad); function xmlLoad(event:Event):void{ rss = new XML(xmlData.data); var hoge ; for (var i:int = 0; i <= 1; i++) { hoge = rss.status[i].text; trace(hoge); } } } //■■■■■■■■■■■■■■■スクリプトここまで

    • ベストアンサー
    • Flash
  • [as3]flashで外部phpの読み込み

    外部phpを読み込みechoで表示した値をFlash上のダイナミックテキストに表示させたいのですが、どうしても上手くいきません。 ■現状は以下のようになっています。 ・外部phpファイルにはechoにて、contents=******************** という出力結果がでます。 ・ダイナミックテキストを作りダイナミックテキスト名がname_strになっています。 ・as3のルートの1フレーム目に以下のようにasを書いています。 import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLVariables; import flash.events.Event; // [2] URLLoaderとURLRequestインスタンスの生成 var myLoader:URLLoader = new URLLoader(); var myRequest:URLRequest = new URLRequest("http://localhost.*******.php"); // [3] ロード完了時の処理をイベントリスナーに登録 myLoader.addEventListener(Event.COMPLETE, onComplete); // [4] 外部テキストファイルのロード実行 myLoader.load(myRequest); // [5] リスナー関数の定義 function onComplete (eventObject:Event) { var my_str:String = eventObject.target.data var myVars:URLVariables = new URLVariables(my_str); for (var name_str:String in myVars){ trace([name_str, myVars[name_str]]); } } ・環境はxamppにてローカルで作業をしています。 初心者でとんちんかんなことをしていまっているかもしれませんが、何卒よろしくお願い致します。

    • ベストアンサー
    • Flash
  • actionscript3.0、XMLのリンク集

    actionscript3.0、XMLのリンク集 Flash、XMLともに初心者です。 Flashに外部XMLを読み込んで、更新のしやすいリンク集を制作したいと思います。 調べながら作っているのですが行き詰っております。。 やりたい事としては、 「swf内のテキストエリアに外部から読み込んだXMLを表示させリンクを張る」です。 例として ■A社 http://www.○○○.com ■B社 http://www.△△△.com ■C社 http://www.□□□.com のようなものです。 「■A社」の部分までは表示させることができたのですが、 その後URLを表示させリンクを張るという処理のしかたが分かりません。 あとなぜかXMLには複数行入っているのですがswfには1行目しか表示されません。。 制作したXMLとactionscriptは下記のようなものです。 <?xml version="1.0" encoding="utf-8"?> <data> <list name="■A社" /><url>http://www.○○○.com</url> <list name="■B社" /><url>http://www.△△△.com</url> <list name="■C社" /><url>http://www.□□□.com</url> </data> var xmlURL:URLRequest = new URLRequest("link.xml"); var xmlLoader:URLLoader = new URLLoader(); xmlLoader.load(xmlURL); var myXML:XML = new XML(); xmlLoader.addEventListener(Event.COMPLETE, xmlLoadStart); function xmlLoadStart(e:Event):void { myXML = XML(xmlLoader.data); trace(); link_txt.text = myXML.list[0].@name; } 環境はWin XP、Flash CS3、as3、flash player9です。 何卒お願い致します。

    • ベストアンサー
    • Flash
  • AS3 Flash 外部テキストの取得

    いつもお世話になっております。 AS3で外部テキストの取得をしてるのですが、どうもうまくいきません。 以下コードです --------------------------------------------------------------- function init02(event:Event):void { var urlReq02:URLRequest=new URLRequest("C:/swf_xsplit/twitter.txt"); var txtloader02:URLLoader = new URLLoader(); txtloader02.load(urlReq02); if (txtloader02.data!=null) { var twitterStr02:String=txtloader02.data; var lines:String=twitterStr02; lines=lines.replace("\r\n"," ").replace("\n"," ").replace("\r"," ").replace("<br>"," ").replace("< /br>"," "); subStrNew=lines; trace("timer = " + lines); if (subStrOld!=subStrNew) { myTimer.stop(); subStrOld = subStrNew; if (mc_1.x >= stage.stageWidth) { this.mc_1.addEventListener(Event.ENTER_FRAME,move_hidari); } } } } ---------------------------------------------------- このinit02()は2秒おきにタイマーで呼び出しております、 処理としては、テキストの値が変わったらイベントを投げる処理です。 URLLoaderをメソッドの外に(メンバ変数)にするとテキストを取得出来ますが、 毎回、同じ内容になってしまいます。 URLLoaderをメソッドの中(上記のコード)に入れると dataがUndifineで帰ってきてしまいます。 お忙しいとは存じますが、有識者の方、何卒、ご指導お願いいたします。

    • ベストアンサー
    • Flash