1

次の関数を使用して、ライブラリからステージにいくつかの画像を追加しています。

function AddImage(image_name:String):void {
    if(image_count == 4) return;
    // change the following line so it uses "image_name"
    var defaultImage:added_1 = new added_1(100, 100);
    var tmpImage:Bitmap = new Bitmap(defaultImage);
    tmpImage.x = 124.5 + (108.5 * image_count);
    tmpImage.y = 1511.9;
    addChild(tmpImage);
    image_count++;
}

私ができるようにしたいのは、画像名を文字列パラメーターとして関数に渡すことですが、これを行う方法がわからないようです。

誰かが私を助けることができますか?

4

1 に答える 1

0

実行したいのは、getDefinitionByNameを使用してクラス定義を取得し、インスタンスを作成できるようにすることです。次のコードは、その方法です。

// you'll need to add this import to use getDefinitionByName
import flash.utils.getDefinitionByName;

function AddImage(image_name:String):void {
    if(image_count == 4) return;
    // this next line gets the class definition of the image_name
    var imageClass:Class = getDefinitionByName(image_name) as Class;
    // this is how you create an instance of that class
    var defaultImage:BitmapData = new imageClass(100, 100);
    var tmpImage:Bitmap = new Bitmap(defaultImage);
    tmpImage.x = 124.5 + (108.5 * image_count);
    tmpImage.y = 1511.9;
    addChild(tmpImage);
    image_count++;
}

変更はインポートです:

import flash.utils.getDefinitionByName;

そしてこれらの2行:

 var imageClass:Class = getDefinitionByName(image_name) as Class;
 var defaultImage:BitmapData = new imageClass(100, 100);

注--- また、Flash IDEではなくFlexを使用してコンパイルしている場合に問題が発生する可能性があることにも言及したいと思います。この場合、次のエラーが発生します。

ReferenceError: Error #1065: Variable <YourImageClassName> is not defined.

この状況を処理する方法は、コンパイラのクラス変数宣言で変数を宣言することです。これにより、コンパイラはそのシンボルを認識します。

したがって、2つの画像のクラス名がimage_1とimage_2である場合、クラス宣言では次のようになります。

private var forCompiler1:image_1;
private var forCompiler2:image_2;

大量の画像がある場合、それは苦痛かもしれませんが、それがコンパイラにそれらを認識させる唯一の方法です。:/ハハ

于 2012-12-05T01:48:36.800 に答える