我不知道如何描述这种情况,所以我将详细描述它。
我创建了一个从MovieClip扩展的类。它看起来像这样:
// Libraries are imported
public class WindowObject extends MovieClip {
public function WindowObject():void {
dragArea_mc.addEventListener(...);
}
public function AFunction():void {
if(close_mc == null) {
// Do something
}
}
}
在MovieClip中定义(或应该)使用此作为基类的dragArea_mc。
我创建了一个MovieClip,其中有两个名为dragArea_mc和close_mc的子项MovieClip,并将其基类设置为顶层。它工作正常。没问题。
由于不同的窗口有不同的行为,我想基于WindowObject创建一些其他类。 (即它们扩展了WindowObject,并具有其他功能。)
我将步骤2中创建的MovieClip的基类更改为新类。现在,问题在于:
1120: Access of undefined property dragArea_mc.
1120: Access of undefined property close_mc.
当我点击错误时,他们将我重定向到WindowObject类。
如果我不创建新类,只是直接在MovieClip上编写附加函数,并将基类设置为WindowObject,它再次正常工作。
答案 0 :(得分:0)
好的,我刚刚启动了flash cs5,并重现了你的问题。而且我不得不承认我有点困惑......而且我还要调查一下,因为我不确定我是否真的明白发生了什么。
尝试将这两个类设置为public dynamic class...
然后直接引用dragArea_mc
,而不是直接引用this.dragArea_mc
我最终得到了什么:
public dynamic class TestParent extends MovieClip {
public function TestParent() {
// trace(drag_mc); doesn't work
trace(this.drag_mc); // works as long as the class is dynamic
}
}
public dynamic class TestChild extends TestParent {
public function TestChild() {
// trace(drag_mc); surprisingly does work, but odd it doesn't work in the parent.
trace(this.drag_mc); // works as long as the class (and its parent) are dynamic
}
}
然后在UI中创建一个新的MovieClip并将其基类设置为TestChild
并创建一个实例名称为drag_me
的子动画片段。
...我打算进一步调查,稍后再修改此帖子,但请尝试一下,看看它是否有助于解决您的问题。
答案 1 :(得分:-1)
它可能是未定义的,因为它还没有在舞台上......就像这样
// Libraries are imported
class WindowObject extends MovieClip {
public function WindowObject():void {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
dragArea_mc.addEventListener(...);
}
public function AFunction():void {
if(close_mc == null) {
// Do something
}
}
}