Flash CS3/4(AS3)中,实例化一个元件,但其类名在程序运行中才能确定,怎么办?

来源:百度知道 编辑:UC知道 时间:2024/06/14 10:45:26
如题。

例如,Flash8(AS2)中,可以用以下代码:
this.iconClass_str="CustomFaces";
this.attachMovie(this.iconClass_str+"Smile", "mySmlie_mc", this.getNextHighestDepth);
实例化一个名为CustomFacesSmile的元件。

因为iconClass_str的值在运行过程中可以改变,这样就可以任意实例化名称形式为XXXSmile的元件了。

但是AS3中,attachMovie方法被放弃了,取而代之的是:
my_mc=new CustomFacesSmile()
this.addChild(my_mc);

这样便不能随意更换为实例化其它的XXXSmile。
那么,如何做才能达到我以前的目的?请给出具体解决方案。谢谢!
经过多方请教和查阅资料,找到如下办法:

var myClass:Class = someApplicationDomain.getDefinationByName( this.iconClass_str + "Smile" );

var newObj:Object = new myClass();

这样就产生了一个CustomFacesSmile类的实例。

如果这个类是位于在运行中载入的swf文档中,而不是本swf文档,那么载入的时候要这样myLoader.load(new URLRequest("libswf.swf"),new LoaderContext(false,ApplicationDomain.currentDomain));

(注意:new LoaderContext(false,ApplicationDomain.currentDomain)这里


感谢palenginner的帮助! Colin Moock的《ACTIO

那不是对你的自律性更强了么?
那不是更有利用管理方便的么?

//文档类
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
private var array:Array;
private var am1:Array;
private var am2:Array;
private var am3:Array;
public function Main()
{
array=new Array(Man_1,Man_2,Man_3);

am1=new Array();
am2=new Array();
am3=new Array();
for (var i:int=0; i<4; i++)
{
am1[i]=new array[0];
}
for (var j:int=0; j<4; j++)
{
am2[j]=new array[1];
}
for (var k:int=0; k<4; k++)
{
am3[k]=new array[2];
}
}
}
}

internal class Man_3
{
public function Man_3()
{
trace("man3");
}
}

internal class Man_2
{
public function Man_2()
{
trace("man2");
}
}

interna