AS3:错误#1065:未定义变量

时间:2013-01-13 07:00:32

标签: arrays actionscript-3 external runtime-error

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

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

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

因此,在设置tileID时,它应该最终成为exampleTile。 (假设mapData[i][j] = "N")。

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

2 个答案:

答案 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;

}