2

我正在做一个 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 生成的名为 popup_btn 的 getter)。这是弹出类:

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(用于添加点击侦听器等),所以这是一个不可行的解决方案。

有人对在这里做什么有任何想法吗?我可以不实例化一个“复杂”的影片剪辑,而是必须一个接一个地实例化每个子影片剪辑吗?

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

谢谢,
-Esa

4

1 回答 1

1

有两种解决方案:将您的课程设置为动态:

public dynamic class ButtonPopup extends Popup

那么你就不会出现flash错误

或者

您需要在 ButtonPopup 类中创建一个名为“_popup_btn”(使用 SimpleButton 或 MovieClip 键入)的公共 var,然后 Flash 将使用您的 popup_btn 实例设置此 var。

于 2012-08-17T10:10:48.277 回答