0

Loader クラスでロードした画像のリストがありますが、一意の名前を割り当てるのに苦労しています。しばらくして特定の画像を削除したいので、一意の名前が必要です。後で削除できるように、ローダーに名前または一意のタグを割り当てる方法はありますか? ありがとう。

ここに私のコードの一部があります

for (var i = startnum; i < endnum; i++){
    var thumb = panels[i].@THUMB;
    var thumb_loader = new Loader();
    thumb_loader.load(new URLRequest(thumb));
    thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);

    thumb_loader.name = i;
    thumb_loader.x = (thumb_width + 20)*i;
}

別の関数で getChildByName を使用しようとしました..

var myLoader:Loader = getChildByName( "1" ) as Loader;
myLoader.unload();

しかし、エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。

私はthumb_loaderをグローバル変数として入れようとしましたが、これを行います

var myLoader:Loader = thumb_loader.getChildByName( "1" ) as Loader;

しかし、それはまだ機能していません。ありがとう。

4

3 に答える 3

3

ActionScript 3 のすべての表示オブジェクトには name プロパティがあります。Loader オブジェクトを作成するたびに、次のように名前を割り当てることができます。

var myLoader:Loader = new Loader();
myLoader.name = "myUniqueName";
myLoader.load( .... );
addChild( myLoader );

指定した名前でローダーを参照したい場合は、getChildByName() メソッドを使用します。

var myLoader:Loader = getChildByName( "myUniqueName" ) as Loader;
myLoader.unload();

getChildByName() は、addChild() を使用して表示リストにローダーを追加した後にのみ機能することに注意してください。それ以外の場合は、Loader オブジェクトへの参照を格納するもの (配列など) を作成し、その配列を介してローダーを参照する必要があります。たとえば、ループの外側で、loadersArr という名前の配列を作成できます。ループでは、次のようにします。

loadersArr["uniqueName"] = thumb_loader;

次に、loadersArr 配列を介して一意の名前でローダーを参照できます。

var loaderToUnload:Loader = loadersArr["uniqueName"];
loaderToUnload.unload();

コードを詳しく見ないと、このコードが存在するスコープと、これらのローダーを参照しようとする可能性のある他のコードが存在する場所を理解するのは困難です。

于 2008-11-24T16:38:25.000 に答える
0

あなたの問題を 100% 理解しているかどうかはわかりませんが、それらをリストではなくオブジェクトマップに入れて、それらがない場合は一意の名前を生成してみませんか...

var img:Image;
var img_map:Object = new Object();
var last_added:int = 0;
for each (img in yourListOfImages)
{
    img_map["img_"+last_added] = img;
    last_added++;
}

環境 (Flex または Flash) によっては、上記の単純化された一意の名前の代わりに UID ジェネレーターを使用できます。

于 2008-11-24T15:29:32.987 に答える
0
package 
{
    import flash.display.Loader;

    public dynamic class DynamicLoader extends Loader 
    {
        public function DynamicLoader()
        {
            super();
        }
    }
}

Loader クラスは封印されたクラスだと思うので、このクラスを作成し、通常の Loader クラスの代わりにそれを使用して、必要な属性を付与します。また、通常の Loader の代わりにこの DynamicLoader を使用しなくても、Loader クラスは name プロパティを使用できると思います。

于 2008-11-24T15:31:06.227 に答える