【问题标题】:AS3 动态影片剪辑名称作为变量
【发布时间】:2021-02-24 18:09:05
【问题描述】:

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

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

我想更改即时添加的 MovieClip,因此我需要将“MovieClipFromLibrary”作为变量。但是,我似乎什么也做不了。

希望我的解释正确?非常感谢帮助。谢谢!

【问题讨论】:

    标签: actionscript-3 flash actionscript


    【解决方案1】:

    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 的类。如果你想让它从加载的SWFs中获取东西,你需要设置某种库管理器并通过Loader.contentLoaderInfo.applicationDomain.getDefinition(...)方法。

    【讨论】:

    • @VC.One 你到底为什么用一段不工作的脚本来更新我的答案(你的代码在显示列表中添加了一个类而不是实例)?
    【解决方案2】:

    那个确切的代码对我不起作用。它给了我一个隐含的强制错误。但是,它非常有用,因为它确实有效......

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

    非常感谢!! ???

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 2011-07-19
      • 1970-01-01
      • 2012-05-25
      相关资源
      最近更新 更多