从外部swf获取MovieClip的命名子项

时间:2012-08-16 19:01:54

标签: actionscript-3 flash variables loading hierarchy

我正在制作一个flash项目,其中我有一个带有大量艺术资产的swf。但是,它们不在舞台上,只是在库中,并且与我编写的代码相关联。

我有一个我想要实例化的类,但是在构造时我一直得到一个引用错误。

以下是如何设置swf / fla库

[MovieClip]ButtonPopup, Linkage:com.packagename.ButtonPopup
[MovieClip]popup_btn, Linkage: none

popup_btn是Popup的子节点,在Flash CS5.5 IDE中恰当地命名为_popup_btn(由Flash Builder生成的getter,名为popup_btn)。这是Popup类:

package com.packagename.ButtonPopup {

    public class ButtonPopup extends Popup {
        public Popup() {
            addClickListeners(popup_btn);
        }

        protected function get popup_btn():MovieClip {
            return this["_popup_btn"];
        }
    }
}

package com.packagename.Popup {
    public class Popup extends MovieClip {
        public Popup() {

        }

        protected function addClickListeners(mc:MovieClip) {
            //add click listeners
        }
    }
}

我的主要SWF看起来像这样:

public MainClass() {
    var loader:Loader = new Loader();
    loader.load(new URLRequest("assets.swf"));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadArtComplete);
}

function loadArtComplete (e:Event):void {
    var popup_class:Class = e.target.applicationDomain.getDefinition("com.packagename::Popup");
    var popup_mc:MovieClip = new popup_class() as MovieClip;

    addChild(popup_mc);
}

可悲的是,我在var popup_mc:MovieClip = new popup_class() as MovieClip行收到错误:

ReferenceError: Error #1056: Cannot create property _popup_btn on com.packagename.Popup
    at flash.display::Sprite/constructChildren()
    at flash.display::Sprite()
    at flash.display::MovieClip()
    at com.packageName.Popup() [file path]
    at com.packageName.MainClass/loadArtComplete() [filepath]

如果我在Flash IDE中保留未命名的popup_btn,我不会收到错误,但是我无法引用MovieClip(用于添加点击监听器等),所以这是一个禁止使用的解决方案。 / p>

有没有人对这里做什么有任何想法?我是否可以不实例化“复杂”的MovieClip,而是必须逐个实例化每个子MovieClip?

编辑:经过一些测试后,看起来它与问题类不是直接从MovieClip继承而是从另一个类(继承自MovieClip)这一事实有关。我更新了源代码以反映这一点。我仍然不知道是否是这种情况(如果没有从MovieClip继承会导致问题)。但我们会看到。

谢谢,
-esa

0 个答案:

没有答案