2013-01-13 62 views
0

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

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

外部文件中的变量看起来像&N=exampleTile

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

但它没有。我已阅读其他解决方案,说文件可能没有加载或任何东西,但我无法理解或应用任何这些修补程序。

回答

0

正如弗洛里安指出的,getDefinitionByName是专门为获得一个类的引用。例如,“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; 

} 
+0

啊哈,这很有道理。我不知道数据类型是“URLVariables”。非常感谢。 – HalfBit

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

你真的应该看看调试器,以了解你创建的字符串的值。

相关问题