Actionscript 3 继承文档类时出现AS3错误1120
我在Flash CS4中与AS3一起工作 我有一个TextPage.fla文件,其中包含一个动态文本字段(名称:PageTitle)作为舞台上的实例。 在文档类(TextPage)中,我根据一些XML设置了PageTitle的文本。 这一切都很好 我有另一个fla文件SpecialTextPage.fla,在舞台上还有PageTitle动态文本字段 我现在尝试从Textpage继承SpecialTextPage文档类:Actionscript 3 继承文档类时出现AS3错误1120,actionscript-3,inheritance,flash-cs4,Actionscript 3,Inheritance,Flash Cs4,我在Flash CS4中与AS3一起工作 我有一个TextPage.fla文件,其中包含一个动态文本字段(名称:PageTitle)作为舞台上的实例。 在文档类(TextPage)中,我根据一些XML设置了PageTitle的文本。 这一切都很好 我有另一个fla文件SpecialTextPage.fla,在舞台上还有PageTitle动态文本字段 我现在尝试从Textpage继承SpecialTextPage文档类: public class SpecialTextPage extends T
public class SpecialTextPage extends TextPage
{
...
}
但我在尝试发布SpecialTextPage时遇到“1120:Access of undefined property PageTitle”错误。
错误位置显示为TextPage.as
作为一种解决方法,我可以复制整个TextPage.As文件,并在SpecialTextPage.As中添加我需要的额外内容,但如果我可以扩展它,我显然更喜欢它
我觉得我不太理解舞台上flash对象和document类之间的关系
有人能帮忙吗?文档类基本上是在SWF时间线的第一个帧上获取和转储的,然后在运行时执行,因此可以访问舞台上的所有内容,就像它们是类中手工编写的属性一样 现在,假设您在SpecialTextPage中创建了一个变量,称为var i:int;无论您做什么,父类都永远无法访问i(也不应该)。同样,如果将stage元素链接到文档类,则父级将永远无法访问它们 与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
}
我解决这个问题的方法是禁用自动声明阶段实例。 (发布设置-->闪存选项卡-->取消选中“自动声明阶段实例”) 然后,我需要在TextPage类中将pageTitle声明为公共字段:
public class TextPage extends MovieClip
{
public var pageTitle:TextField;
...
}
谢谢你的回答。我曾假设基类将拾取子类上的字段,只要它具有相同的名称。我不知道你建议的解决方案会如何工作,因为它仍然引用字段名,但我确实找到了一个对我有效的解决方案-请参阅我对问题的回答。