Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AS3 can';无法加载XML文件_Xml_Actionscript 3 - Fatal编程技术网

AS3 can';无法加载XML文件

AS3 can';无法加载XML文件,xml,actionscript-3,Xml,Actionscript 3,我正在用AS3在flash builder上制作一个测验应用程序 我想加载一个XML文件来获取我的问题。但是我想我无法加载我的XML文件。我在谷歌上搜索了很多。我搜索了论坛。但什么都没用。我只是看不出我的错误 当我单击按钮时,我想在我的后台查看我的XML文件是否已加载。但在这种情况下,我在舞台上没有任何价值 小测验 package { [SWF('width'= 800, 'height' = 600, 'frameRate'=40)] public class Quiz

我正在用AS3在flash builder上制作一个测验应用程序

我想加载一个XML文件来获取我的问题。但是我想我无法加载我的XML文件。我在谷歌上搜索了很多。我搜索了论坛。但什么都没用。我只是看不出我的错误

当我单击按钮时,我想在我的后台查看我的XML文件是否已加载。但在这种情况下,我在舞台上没有任何价值

小测验

package
{   
    [SWF('width'= 800, 'height' = 600, 'frameRate'=40)]
    public class Quiz extends Sprite
    {
                // gloabal container 
        public static var container:Sprite = new Sprite();
        // button object 
        public var btnMulti:MyButton = new MyButton();

        public function Quiz()
        {
            init();
        }

        private function init():void {
            addChild(container);
            makeMenu();
        }


        private function makeMenu():void {
            btnMulti.buttonText = "multipleChoice";
            btnMulti.x = 50;
            btnMulti.y = 20;
            btnMulti.addEventListener(MouseEvent.CLICK, multiHandler);
                        // add button to the stage
            container.addChild(btnMulti);
        }

        private function multiHandler(e:MouseEvent):void {
            // if button clicked make a Question object
            var q:Question = new Question();

            // get the value
            var questionText:String = q.getter;

            // print the value in a textfield on the stage
            var tField:TextField = new TextField();
            tField.text = questionText;
            container.addChild(tField);
        }

    }
}
问题.as

public class Question extends Sprite
    {
        private var test:String;    

        public function Question()
        {
            // xml
            var urlReq:URLRequest = new URLRequest("./files/multiplechoice.xml"); 
            var urlLoad:URLLoader = new URLLoader();
            urlLoad.addEventListener(Event.COMPLETE, textLoaded);
            urlLoad.load(urlReq); 
        }

        private function textLoaded(e:Event):void {
            XML.ignoreWhitespace = true;
            var xml:XML = new XML(e.target.data);

            // check if loaded
            test = "xml loaded";
        }

        // getter
        public function get getter():String {
            return test.questionText;
        }
    }
multiplechoice.xml

<?xml version="1.0" encoding="UTF-8"?>
<multipleChoice>
    <questionSet>
        <question>Question 1</question>
        <answer correct="yes">Answer 1</answer>
        <answer>Answer 2</answer>
        <answer>Answer 3</answer>
        <answer>Answer 4</answer>
    </questionSet>

    <questionSet>
        <question>Question 2</question>
        <answer correct="yes">Answer 1</answer>
        <answer>Answer 2</answer>
        <answer>Answer 3</answer>
        <answer>Answer 4</answer>
    </questionSet>

    <questionSet>
        <question>Question 3</question>
        <answer correct="yes">Answer 1</answer>
        <answer>Answer 2</answer>
        <answer>Answer 3</answer>
        <answer>Answer 4</answer>
    </questionSet>
</multipleChoice>

问题1
答复1
答复2
答复3
答复4
问题2
答复1
答复2
答复3
答复4
问题3
答复1
答复2
答复3
答复4

问题是您有一个已加载文本的回调,但在调用getter()之前,您没有等待它加载。先试试这个:

public function get getter():String {
    if(test) {
        return test.questionText;
    } else {
        return "Data not available";
    }
但也可以将函数引用传递给问题类,以便在加载时将值传递回。您可能需要考虑在任何情况下预加载问题

public class Question extends Sprite
{
    private var test:String;
    private var callback:Function; 

    public function Question(_callback:Function)
    {
        this.callback = _callback;
        // xml
        var urlReq:URLRequest = new URLRequest("./files/multiplechoice.xml"); 
        var urlLoad:URLLoader = new URLLoader();
        urlLoad.addEventListener(Event.COMPLETE, textLoaded);
        urlLoad.load(urlReq); 
    }

    private function textLoaded(e:Event):void {
        urlLoad.removeEventListener(Event.COMPLETE, textLoaded);

        XML.ignoreWhitespace = true;
        var xml:XML = new XML(e.target.data);

        // check if loaded
        this.callback(xml);
    }
}


// in the main class
    private function multiHandler(e:MouseEvent):void {
        // if button clicked make a Question object
        var q:Question = new Question(this.questionCallback);

    }

    public function questionCallback(xml:XML):void
        // get the value from the xml

        var tField:TextField = new TextField();
        tField.text = <<parsed xml....>>;
        container.addChild(tField);
    }
公共类问题扩展了Sprite
{
私有var测试:字符串;
私有var回调:函数;
公共函数问题(_回调:函数)
{
this.callback=\u callback;
//xml
var urlReq:URLRequest=newurlrequest(“./files/multiplechoice.xml”);
var urlLoad:URLLoader=new URLLoader();
urlLoad.addEventListener(Event.COMPLETE,textLoaded);
加载(urlReq);
}
私有函数textLoaded(e:事件):void{
urlLoad.removeEventListener(Event.COMPLETE,textLoaded);
XML.ignoreWhitespace=true;
var xml:xml=新的xml(e.target.data);
//检查是否已加载
回调(xml);
}
}
//在班上
私有函数multiHandler(e:MouseEvent):void{
//如果单击按钮,则生成问题对象
var q:Question=新问题(this.questionCallback);
}
公共函数questionCallback(xml:xml):void
//从xml中获取值
var-tField:TextField=new TextField();
tField.text=;
container.addChild(tField);
}
您可能希望将textfield和question类属性设置为本地属性,而不是将作用域保留为函数的本地属性,以便您也可以访问它们