我有,我已经加载了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:无法访问空对象引用的属性或方法

我试图把thumb_loader作为全局变量,并执行此

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

但它仍然没有工作。 感谢。

有帮助吗?

解决方案

在ActionScript 3的所有显示对象具有名称属性。当你创建一个Loader对象,你可以指定一个名字给它,像这样:

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

如果你想在你给它的名字来指代装载机,使用getChildByName()方法。

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

请当心,你已经使用addChild添加的装载机(县)显示列表后getChildByName()只会工作()。否则,你就必须创造一些存储引用到Loader对象,如数组,并通过该阵列指的是装载机。例如,你的循环之外,你可以创建一个名为loadersArr数组。在你的循环,你会怎么做:

loadersArr["uniqueName"] = thumb_loader;

然后就可以通过loadersArr阵列是指你的装载机与您的独特的名字。

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

没有看到更多的代码,其难度的,其中该代码驻留理解的范围,并且其中的任何其他代码,可尝试引用这些装载机驻留。

其他提示

不知道我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发电机,而不是我简单的独特的名称之上。

package 
{
    import flash.display.Loader;

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

我相信Loader类是一个密封类,所以你会想创建这个类,并用它来代替正常的Loader类的给它任何你想要的属性。我也相信,如果没有使用这个DynamicLoader而不是正常的装载机,Loader类确实有可用的name属性吧。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top