我正在制作一个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