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

Florian が指摘するように、getDefinitionByName特に Class 参照を取得するためのものです。たとえば、「flash.net.URLLoader」のようなものは、URLLoader クラスへの参照を提供します。名前で通常の変数を取得するためには使用されません (したがって、「N」が のプロパティであっても、「evt.target.data.N」は何も返しませんdata)。

「 A=tileA&B=tileB&C=tileCevt.target.data 」の行に沿った長い文字列のように聞こえます。その場合は、最初にその文字列を解析して変数を分離する必要があります。そのデータ形式 (flash.net.URLVariables) で 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 に答える
0

それは意味がありません。渡された文字列のような名前の特定のタイプのインスタンスgetDefinitionByNameを取得するために使用されます。そして、定義は常に で始まります。ClassClass"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 に答える