AS3动态电影剪辑名称作为变量



在动画CC中,我可以使用以下代码从库中动态添加MovieClips:

var MovieClipName_mc:MovieClipFromLibrary = new MovieClipFromLibrary();
stage.addChild(MovieClipName_mc);

我想更改我正在添加的电影剪辑,所以我需要";MovieClipFromLibrary";作为变量。然而,我似乎什么都做不了。

我希望我解释得对吗?非常感谢您的帮助。谢谢

类似getDefinitionByName(…)方法应该可以工作。

//# setup the vars
var myVar :String = "MovieClipFromLibrary";
var MovieClipName_mc :Class;
//# apply the vars and add to screen
MovieClipName_mc = getDefinitionByName( myVar ) as Class;
stage.addChild(MovieClipName_mc);

您还可以制作一个函数createInstance来处理添加多个变量的问题,如下所示:

实施

import flash.utils.getDefinitionByName;
function createInstance(avalue:*):*
{
var C:Class;

if (avalue is Class)
{
C = avalue as Class;
}
else if (avalue is String)
{
// If there is actually a class in library
// with the provided class name, then
// C will be filled with a valid class.
C = getDefinitionByName(aname) as Class;
}

if (C != null)
{
return new C;
}
else
{
return null;
}
}

用法

var M:DisplayObject;
// Pass class name as String.
M = createInstance("MovieClipFromLibrary");
if (M != null)
{
stage.addChild(M);
}
// Pass class reference as is.
M = createInstance(MovieClipFromLibrary);
if (M != null)
{
stage.addChild(M);
}

请记住,您只能通过这种方式访问当前SWF的类。如果您希望它从加载的SWF中获取内容,则需要设置某种库管理器,并通过Loader.contentLoaderInfo.applicationDomain.getDefinition(…)方法获取内容。

那个确切的代码对我不起作用。它给了我一个隐含的强制错误。然而,这非常有帮助,因为这确实奏效了。。。

//Get Item from library
var MCName:Class = getDefinitionByName('TEST') as Class;

var MovieClip_mc:MovieClip = new MCName();
stage.addChild(MovieClip_mc);

非常感谢!!

最新更新