0

使用getDefinitionByName我一直收到错误说它没有定义(如标题所示)。我正在使用的特定代码是

var tileID:String = String(getDefinitionByName("evt.target.data."+mapData[i][j])) mapData 已经在每个位置填充了一个字符。计划是我可以使用任何 mapData 的值作为将单个字符转换为图块的完整链接名称的变量名称。这些属性来自另一个为变量设置的外部 .txt 文件(这是代码行链接到的外部文件)。

外部文件中的变量类似于&N=exampleTile.

因此,当涉及到设置时,tileID它最终应该是exampleTile. (假设mapData[i][j] = "N")。

但事实并非如此。我读过其他解决方案,说文件可能没有加载或任何东西,但我无法理解或应用任何这些修复。

4

2 回答 2

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));
}

您确实应该查看调试器,以了解您正在创建的字符串的值。

于 2013-01-13T09:57:59.487 回答
0

正如 Florian 指出的那样,getDefinitionByName它专门用于获取 Class 参考。例如,像“flash.net.URLLoader”这样的东西会给你一个 URLLoader 类的引用。它不用于通过名称获取常规变量(因此即使“N”是 的属性,“evt.target.data.N”也不会返回任何内容data)。

听起来你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;

}
于 2013-01-13T15:22:25.570 回答