Actionscript 3 将函数调用为属性AS3时出错
C:…\HandleXML.as,第28 1120行:访问未定义的属性processXML 为什么?。。。这不是我的文档类,但其中没有调用该类的内容。当我把它放在文档类中时,它就起作用了,但我正在尝试将文档类拆分为多个类。不管我读什么,有多节课对我来说还是很奇怪Actionscript 3 将函数调用为属性AS3时出错,actionscript-3,Actionscript 3,C:…\HandleXML.as,第28 1120行:访问未定义的属性processXML 为什么?。。。这不是我的文档类,但其中没有调用该类的内容。当我把它放在文档类中时,它就起作用了,但我正在尝试将文档类拆分为多个类。不管我读什么,有多节课对我来说还是很奇怪 package { import flash.events.Event; import flash.events.MouseEvent; import flash.events.KeyboardEvent;
package {
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.xml.*;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.net.FileReference;
import flash.net.FileFilter;
public class HandleXML {
public static var mapXML:XML;
public var saveXML:XML;
public var file:FileReference;
public var fileLoader:URLLoader;
public var saveFile:FileReference;
public function HandleXML()
{
// constructor code
}
public static function UseGeneric()
{
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("Maps/TestMap.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
}
public function loadFileDialogue():void
{
file = new FileReference();
var xmlFileTypes:FileFilter = new FileFilter("XML (Maps/*.xml)", "Maps/*.xml;");
file.browse();
file.addEventListener(Event.SELECT, selectFile);
}
public function selectFile(e:Event):void
{
file.addEventListener(Event.COMPLETE, loadFile);
file.load();
}
function loadFile(e:Event):void
{
fileLoader = new URLLoader();
fileLoader.load(new URLRequest("Maps/"+file.name));
fileLoader.addEventListener(Event.COMPLETE, processXML);
}
public function processXML(e:Event)
{
mapXML = new XML(e.target.data);
ParseIntoArray();
}
public function SaveFile():void
{
BuildSaveXML();
saveFile = new FileReference();
saveFile.save((saveXML), "SavedXML.xml");
}
public function BuildSaveXML()
{
var xmlOutput:String = "<Map>" +
"<MapWidth>" + mapXML.MapWidth + "</MapWidth>" +
"<MapHeight>" + mapXML.MapHeight + "</MapHeight>" +
"<ROW>" + Engine.mapArray.toString()+"</ROW>" +
"</Map>";
saveXML = new XML(xmlOutput);
}
public function ParseIntoArray()
{
var tempArray:Array = new Array();
var tempStr:String = mapXML.ROW.toString();
tempStr = tempStr.replace(/<ROW>/g, "");
tempStr = tempStr.replace(/<\/ROW>/g, "");
tempArray.push(tempStr.split(","));
for(var i:int = 0; i < mapXML.MapHeight; i++)
{
Engine.mapArray[i] = [];
for(var j:int = 0; j < mapXML.MapWidth; j++)
{
Engine.mapArray[i].push(tempArray[0].shift());
}
}
}
}
}
正如您所指出的,UseGeneric函数被声明为静态函数,但它不应该是:
public function UseGeneric()
{
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("Maps/TestMap.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
}
我想我不太了解事件的听众。不过,到目前为止,我一直在毫无问题地使用它们。我以为它像。。。要侦听的addEventListenerEvent,听到事件后使用的函数。我从来没有想过函数是变量或属性,除非使用函数get。。。我知道什么是常规的旧变量…对不起,我没有注意到它是一个函数。尝试使用“this.processXML”并查看其是否有效。C:…HandleXML.as,第28 1061行:通过静态类型为HandleXML.ahhh的引用调用可能未定义的方法addEventListener。我想这是因为我使用了公共静态函数。。。现在工作很好。非常感谢你!先生,你是个学者。这是因为我从下拉列表中调用了2个函数。。。case-genericMap:handleXML.UseGeneric;生成地图;打破它试图在数组传回之前生成映射。如何在ParseIntoArray完成后直接生成映射?我会弄明白的。。。谢谢!