0

AS3は初めてです。xml ファイルから読み込んだデータを変数に保存しようとしています。後でその変数を呼び出します。

ここに私のコードがあります:

package {

import flash.display.MovieClip;
import flash.events.*;
import flash.display.Stage;
import flash.text.TextField;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLLoaderDataFormat;
import flash.net.URLVariables;

public class myClass extends MovieClip {
        public static var objectOneTotal:int = 1;
        public static var objectOneCurrent:int = 1;


    public function myClass() {


        var myXML:XML;
        var myLoader:URLLoader = new URLLoader();
        myLoader.load(new URLRequest("beers.xml"));
        myLoader.addEventListener(Event.COMPLETE, processXML);

            function processXML(event:Event):void {
            myXML = new XML(event.target.data);

            myClass.objectOneCurrent = int(myXML.current);
            myClass.objectOneTotal = int(myXML.total);

            trace(myClass.objectOneCurrent);
            trace(myClass.objectOneTotal);

            }

        trace(myClass.objectOneCurrent);
        trace(myClass.objectOneTotal);
        var objectOneStart:int = objectOne.x;
        objectOne.x = (objectOneCurrent / objectOneTotal)  * (finish.x - objectOneStart);

    }

}

}

何をしているのか:実行すると、トレースを見て、オブジェクトの初期値「1」をトレースしてから、xml からロードされた値をトレースします。だから私はそれがデータをロードしていると信じていますが、プログラムは残りのコードの後に​​のみprocessXML関数を実行しています。か何か。

よくわかりません。しかし、xml データを読み取るには最後の 2 つのトレースが必要です。

ありがとう

4

1 に答える 1

0

AS3 は非同期であるためMyClass、XML がロードされる前にメソッド全体が実行されます。XML が読み込まれると、XML を処理するために で定義されたコードprocessXMLが実行されます。

これに対する解決策は、processXMLハンドルを設定することですobject1.x:

package {

    import flash.display.MovieClip;
    import flash.events.*;
    import flash.display.Stage;
    import flash.text.TextField;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.net.URLRequestMethod;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLVariables;

    public class myClass extends MovieClip {
            public static var objectOneTotal:int = 1;
            public static var objectOneCurrent:int = 1;


        public function myClass() {
            var myXML:XML;
            var myLoader:URLLoader = new URLLoader();
            myLoader.load(new URLRequest("beers.xml"));
            myLoader.addEventListener(Event.COMPLETE, processXML);

            // these will fire before the XML is loaded
            trace(myClass.objectOneCurrent);
            trace(myClass.objectOneTotal);


        }

        public function processXML(event:Event):void {
            myXML = new XML(event.target.data);

            myClass.objectOneCurrent = int(myXML.current);
            myClass.objectOneTotal = int(myXML.total);

            // these fire after the XML is loaded
            trace(myClass.objectOneCurrent);
            trace(myClass.objectOneTotal);

            var objectOneStart:int = objectOne.x;
            objectOne.x = (objectOneCurrent / objectOneTotal)  * (finish.x - objectOneStart);

        }
    }
}
于 2013-02-07T09:45:04.847 に答える