继承文档类时AS3错误1120

时间:2011-02-25 11:47:20

标签: actionscript-3 inheritance flash-cs4

我正在使用AS3在Flash CS4中工作。

我有一个TextPage.fla文件,其中包含一个动态文本字段(name:PageTitle)作为舞台上的实例。 在文档类(TextPage)中,我根据一些XML设置了PageTitle的文本。 一切正常。

我有另一个fla文件,SpecialTextPage.fla,并且舞台上还有PageTitle动态文本字段。

我现在尝试将SpecialTextPage文档类继承自Textpage:

public class SpecialTextPage extends TextPage
{
...
}

但是我得到了一个“1120:访问未定义的属性PageTitle。”尝试发布SpecialTextPage时出错。 错误位置以TextPage.as

的形式给出

作为一种解决方法,我可以复制整个TextPage.as文件,并在SpecialTextPage.as中添加我需要的额外内容,但如果我可以扩展它,我显然更喜欢它。

我觉得我不太了解舞台上flash对象与文档类之间的关系。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

文档类基本上被取出并转储到SWF的时间轴的第一帧,然后在运行时执行,因此可以访问舞台上的所有内容,就像它们是您班级中的手写属性一样。

现在假设您在SpecialTextPage中创建一个变量,您调用var i:int;无论你做什么,父类都永远不会访问i(也不应该)。同样,舞台元素链接到您的文档类,父级将永远不会访问它们。

类似于MovieClip扩展Sprite,Sprite永远不会引用MovieClips时间轴,因为它没有意识到它。

但并非所有人都失去了!实现目标的一个好方法是拥有以下内容:

/* TextPage */
/* Parent Class */
/* ... */
public function TextPage() {
    pageTitle.text = getTitle(); // This textfield would be the one in TextPage.fla
}

protected function getTitle():String {
    return "All the text you could ever need in your title";
}
/* ... */


/* SpecialTextPage */
/* Child */
/* ... */
public function SpecialTextPage() {
   pageTitle.text = getTitle(); // This textfield would be in SpecialTextPage.fla
}

答案 1 :(得分:0)

解决问题的方法是自动禁用声明阶段实例。 (发布设置 - > Flash标签 - >取消选中'自动声明舞台实例')

然后我需要在我的TextPage类上将pageTitle声明为 public 字段:

public class TextPage extends MovieClip
{
    public var pageTitle:TextField;
    ...
}