使用getDefinitionByName
我一直收到错误,说它没有定义(如标题所示)。我正在使用的特定代码是
var tileID:String = String(getDefinitionByName("evt.target.data."+mapData[i][j]))
mapData已由每个位置的字符填充。计划是我可以使用mapData的值作为变量名称,用于将单个字符转换为tile的完整链接名称。这些属性来自另一个为变量设置的外部.txt文件(这是代码行链接到的外部文件)。
外部文件中的变量类似于&N=exampleTile
。
因此,在设置tileID
时,它应该最终成为exampleTile
。 (假设mapData[i][j] = "N"
)。
但事实并非如此。我已阅读其他解决方案,说文件可能没有加载或任何东西,但我无法理解或应用任何这些修复。
答案 0 :(得分:0)
这没有任何意义。 getDefinitionByName
用于检索特定类型的Class
实例 - Class
,其名称与传递的字符串相同。定义将始终以"evt.target.data."
开头。
你有没有调试过它?
function any_handler(i:int, j:int):void {
const suffix:String = mapData[i][j],
qualifiedName:String = "evt.target.data." + suffix;
// this is wrong
const titleID:String = String(getDefinitionByName(qualifiedName));
}
你真的应该看看调试器,以便知道你正在创建的字符串的值。
答案 1 :(得分:0)
正如Florian所指出的,getDefinitionByName
专门用于获取Class引用。像“flash.net.URLLoader”之类的东西会给你一个URLLoader类的引用。它不是用于通过名称获取常规变量(因此即使“N”是data
的属性,“evt.target.data.N”也不会返回任何内容。)
听起来你的evt.target.data
是一条长长的字符串,沿着“ A = tileA& B = tileB& C = tileC ”。如果是这样,您需要先解析该字符串以分离变量。您应该能够使用具有该数据格式的URLVariables(flash.net.URLVariables),然后您可以使用[]数组访问运算符来读取已解析的变量:urlVariablesObject["variableName"]
。所以你可能会这样做:
import flash.events.Event;
import flash.net.URLVariables;
import flash.net.URLLoader;
import flash.net.URLRequest;
var loader:URLLoader = new URLLoader();
var parsedData:URLVariables;
var mapData:Array = [["A", "B", "C"], ["D", "E", "F"]];
loader.addEventListener(Event.COMPLETE, externalFileLoaded);
loader.load(new URLRequest("externalFile.txt"));
// externalFile.txt contains "A=tileA&B=tileB&C=tileC&D=tileD&E=tileE&F=tileF".
function externalFileLoaded(evt:Event):void {
parsedData = new URLVariables(evt.target.data);
var tileID:String = readMap(0, 1);
trace(tileID); // "tileB".
}
function readMap(i:uint, j:uint):String {
var mapValue:String = mapData[i] [j];
var tileID:String = parsedData[mapValue];
return tileID;
}