为什么我的xml文件阅读器类不起作用?

时间:2009-09-07 00:25:56

标签: xml actionscript-2

我正在尝试在actionscript文件中创建一个简单的类来处理xml文件的读取和解析/管理。此类将movieclip作为参数,并使影片剪辑根据导入的结果进行操作。我试过这个:

class FileReader {
    var menu:MovieClip;
    function FileReader(newMenu) {
        menu = newMenu;
    }
    //Load the specified xml file
    function loadFile(fileName) {
        menu.gotoAndStop("loading");
        var name = levelName+".xml";
        var xmlFile = new XML();
        xmlFile.ignoreWhite = true;
        xmlFile.load(name);
        xmlFile.onLoad = function() {
            //Parse Input
            menu.gotoAndStop("loaded");
        };
    }
}

由于某种原因,当代码到达onLoad函数时,文件正确加载但应用程序不再知道菜单动画片段的存在。如果我试图跟踪菜单的任何属性,它说它是未定义的。所以我试过这个:

class FileReader {
    var menu:MovieClip;
    var xmlFile:XML;
    function FileReader(newMenu) {
        menu = newMenu;
    }
    //Load the specified xml file
    function loadFile(fileName) {
        menu.gotoAndStop("loading");
        var name = fileName+".xml";
        xmlFile = new XML();
        xmlFile.ignoreWhite = true;
        xmlFile.load(name);
        xmlFile.onLoad = function() {
            //Parse Input
            menu.gotoAndStop("loaded");
        };
    }
}

在这种情况下,xml文件根本不会加载,并且xmlFile对象未定义。这里发生了什么,为什么这两种方法都不起作用?

2 个答案:

答案 0 :(得分:0)

通过使用第一种方法,我发现我可以简单地将影片剪辑作为参数传递。然后,该函数将识别影片剪辑并按预期正常操作。仍然感到困惑的是,如果没有参数传递它将无法工作。

修改 我想这实际上并没有像我想象的那样奏效。我还在努力!有其他想法的人吗?

答案 1 :(得分:0)

这有点傻,但我终于找到了一种方法来完成这项工作:

class FileReader {
    var menu:MovieClip;
    function FileReader(newMenu) {
        menu = newMenu;
    }
    //Load the specified xml file
    function loadFile(fileName) {
        menu.gotoAndStop("loading");
        var newMenu:MovieClip = menu;   //Make a refernce to menu here
        var name = levelName+".xml";
        var xmlFile = new XML();
        xmlFile.ignoreWhite = true;
        xmlFile.load(name);
        xmlFile.onLoad = function() {
                //Parse Input
                newMenu.gotoAndStop("loaded"); //Call the refence rather than the actual object
        };
    }
}

通过对菜单进行新的引用,onLoad函数可以使用此引用与实际的菜单影片剪辑进行对话。我想这很有效。