我是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;
}
答案 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函数和事件处理程序分开。
此外,按照惯例,函数名称应以小写字母开头,因此我相应地重命名了处理函数。