在AS3中的函数内更改根变量

时间:2012-04-02 09:34:00

标签: actionscript-3 flash actionscript

我是Actionscript 3的新手,在使用AS2多年后开始使用它,

我现在要做的是从函数中更改位于根目录中的变量,

这样的事情:

var myVariable:String = "String test";

function testFunction():void
{
 myVariable = "new String";
}

我知道这是有问题的,我已经尝试过google了很多关于getter和setter,全局变量等等,但是我仍然遇到这个问题,我很高兴明白为什么这不会工作以及如何实际做到这一点。

谢谢

编辑: 我正在尝试加载带有书籍列表的XML文件, 我环顾四周找到了这个功能,试图调整它以适合我,但我不能让它工作, 我能够加载XML并实际读取它的信息,但我试图设置一个全局数组或类似的东西,以便我以后可以访问数据,

继承人代码:

var books:XML = loadBooks();
trace(books); //Returns a blank output

function loadBooks():XML {
    var xmlLoader:URLLoader = new URLLoader();
    var xmlData:XML = new XML();
    xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
    xmlLoader.load(new URLRequest("bookList.xml"));

    function LoadXML(e:Event):void {
    xmlData = new XML(e.target.data);
    trace(xmlData); //Returns what I want to have
    }

    return xmlData;
}

2 个答案:

答案 0 :(得分:0)

而不是root来引用回到舞台,as3改变了回传:

MovieClip(parent).nestedMovieClip;

以上适用于变量以及

var bob:int = 0;
MovieClip(parent.parent).bob = 3;

在movieclip中:回调父级或root / stage这个变量被更改  :: now bob = 3,

上面会有效,任何问题google“as3 root in as3:;

或者让我们知道给我你的代码,我会为你工作。

答案 1 :(得分:0)

您遇到的问题是由AS3中的异常加载引起的。在loadBooks函数中,您设置了一个侦听器来检测load complete事件,但您的代码并没有就此停止。它在正在进行加载时快速运行,这意味着您实际返回一个空的XML对象。

这是你应该怎么做的:

//define the variable in wide scope
var books:XML;
//start the load operation
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, onLoadXML);
xmlLoader.load(new URLRequest("bookList.xml"));
//event handler for load complete
function onLoadXML(evt:Event):void
{
    //clean up the listener
    xmlLoader.removeEventListener(Event.COMPLETE, onLoadXML);
    //assign the XML to your books object
    books = new XML(e.target.data);
    trace(books);
    //call a function to use the loaded data
    readBooks();
}

function readBooks():void
{
    ...
}

一旦您的应用程序依赖于加载操作的结果,您将不得不等待加载事件,并让该事件的处理程序触发程序执行的下一步。我用readBooks函数说明了这一点。

您也可以将实际的加载操作包装在函数中,但要将load函数和事件处理程序分开。

此外,按照惯例,函数名称应以小写字母开头,因此我相应地重命名了处理函数。