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

Actionscript 3 AS3动态电影剪辑名称作为变量,actionscript-3,flash,actionscript,Actionscript 3,Flash,Actionscript,在Animate CC中,我可以使用以下代码从库中动态添加MovieClips: var MovieClipName_mc:MovieClipFromLibrary = new MovieClipFromLibrary(); stage.addChild(MovieClipName_mc); 我想更改正在动态添加的MovieClip,因此需要将“MovieClipFromLibrary”作为变量。然而,我似乎什么也做不到 我希望我解释得对吗?非常感谢你的帮助。谢谢 类似于(…)的方法应该可以工

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

var MovieClipName_mc:MovieClipFromLibrary = new MovieClipFromLibrary();
stage.addChild(MovieClipName_mc);
我想更改正在动态添加的MovieClip,因此需要将“MovieClipFromLibrary”作为变量。然而,我似乎什么也做不到

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

类似于(…)的方法应该可以工作

//# 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);
}
用法

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的类。如果您希望它从加载的SWFs获取内容,则需要设置某种库管理器,并通过..(…)方法获取内容。

类似于(…)方法的方法应该可以工作

//# 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);
}
用法

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的类。如果您想让它从加载的SWFs获取内容,您需要设置某种库管理器,并通过..(…)方法获取内容。

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

    //Get Item from library
    var MCName:Class = getDefinitionByName('TEST') as Class;
    
    var MovieClip_mc:MovieClip = new MCName();
    stage.addChild(MovieClip_mc);

所以非常感谢 那个确切的密码对我不起作用。这给了我一个隐含的强迫错误。然而,这是非常有用的,因为这确实有效

    //Get Item from library
    var MCName:Class = getDefinitionByName('TEST') as Class;
    
    var MovieClip_mc:MovieClip = new MCName();
    stage.addChild(MovieClip_mc);

所以非常感谢@VC.One为什么你要用一块非工作脚本更新我的答案(你的代码将一个类添加到显示列表而不是实例)?@VC.One为什么你要用一块非工作脚本更新我的答案(你的代码将一个类添加到显示列表而不是实例)?