• ベストアンサー
  • 困ってます

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

  • 質問No.5620933
  • 閲覧数91
  • ありがとう数3
  • 回答数2

お礼率 60% (24/40)

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(~);で出力してとか、知りたい情報が手に入らないのでどなたか教えていただけませんか?お願いします。

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

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

ベストアンサー率 65% (189/287)

#1です

そういえばそうですね・・・
じゃあ関数のなかで変数を宣言せずに
外で宣言してなかでは代入だけすれば
解決するんじゃないでしょうか

var speed:int
var varXML:XML=XML(myLoader.data);
speed=int(varXML.id[2].@speed);
gotoAndPlay(2);
}
補足コメント
yoyoyoiyoi

お礼率 60% (24/40)

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も認識されました。
ありがとうございます。
投稿日時:2010/01/27 01:20

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 65% (189/287)

それは単純にrootの1フレーム目のspeedは
2フレーム目に配置されたBaseMCから見たら
parent.speedだからなんじゃないでしょうか・・


とりあえずどの段階でつまずいてるのか
確認する為にxSetTextの時点で一回
trace(speed)してみたりしてみた方が
いいかもしれないですよ
補足コメント
yoyoyoiyoi

お礼率 60% (24/40)

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

なにかもっと違うやり方があるのでしょうか?
投稿日時:2010/01/26 01:16
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ