それで、私は自分自身を数分節約してコードを少しきれいにするために恥ずかしい時間を費やしましたが、Google は何も生成しませんでした。問題は、角括弧表記 + ライブラリ項目にあります。
たとえば、「myMC_5」という名前のムービークリップがあり、その X 位置を 0 に設定するとします。
myMC_5.x = 0;
..そして、MC の名前をハードコーディングしたくないが、変数に基づいて特定の MovieClip を移動するための 1 行のコードが必要な場合は、次のようにすることができます。
var selectMC = 5;
root["myMC_"+selectMC]x = 0;
..これは myMC_5.x = 0 とまったく同じ効果がありますが、今回は場所 (「ルート」または「これ」など) を指定する必要があります。
問題:
背景のグラフィックがライブラリから読み込まれるゲームに取り組んでおり、レベルごとに異なります。ライブラリからのベクターの初期読み込みは次のようになります。
private var land:vector_land0 = new vector_land0();
..これは正常に機能しますが、その特定のベクトルのみをロードします。約30以上あるはずです。次のように、現在のレベルを追跡する変数に基づいて、それらのいずれかをロードするために、コンストラクターに 1 行のコードを配置したいと思います。
private var land:["vector_land"+theLevel] = new ["vector_land"+theLevel]();
..しかし、それは機能しません。最初の例のように、オブジェクトの場所を指定する必要があるため、構文エラー ("expecting identifier before leftbracket") が発生します。
root["myMC_"+"whatever"].x = 0;
..しかし、このライブラリ アイテムには「場所」がありません。では、ライブラリからベクターを動的にロードするにはどうすればよいのでしょうか。「ルート上」や他の場所ではありません。場所がありません。これを達成するための標準的な方法が、30 の異なるクラスを作成するか、30 の「if」ステートメントを含む巨大なコード ブロックを作成することであるとは信じられませんが、Google を検索しても何も見つかりませんでした。:(