Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 继承文档类时出现AS3错误1120_Actionscript 3_Inheritance_Flash Cs4 - Fatal编程技术网

Actionscript 3 继承文档类时出现AS3错误1120

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

我在Flash CS4中与AS3一起工作

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

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

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

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;
    ...
}

谢谢你的回答。我曾假设基类将拾取子类上的字段,只要它具有相同的名称。我不知道你建议的解决方案会如何工作,因为它仍然引用字段名,但我确实找到了一个对我有效的解决方案-请参阅我对问题的回答。