AS3 - 如何分配的名称或标记装载机?
-
10-07-2019 - |
题
我有,我已经加载了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属性吧。