Ошибка AS3 1120 при наследовании класса документа - PullRequest
0 голосов
/ 25 февраля 2011

Я работаю во Flash CS4 с AS3.

У меня есть файл TextPage.fla, который содержит динамическое текстовое поле (имя: PageTitle) в качестве экземпляра на сцене.В классе документа (TextPage) я устанавливаю текст PageTitle согласно некоторому XML.Все это прекрасно работает.

У меня есть другой файл fla, SpecialTextPage.fla, в котором также есть динамическое текстовое поле PageTitle на сцене.

Теперь я пытаюсь наследовать класс документа SpecialTextPageс текстовой страницы:

public class SpecialTextPage extends TextPage
{
...
}

но я получаю «1120: доступ к неопределенному свойству PageTitle».ошибка при попытке опубликовать SpecialTextPage.Расположение ошибки дано как TextPage.as

В качестве обходного пути я могу просто скопировать весь файл TextPage.as и добавить дополнительные вещи, которые мне нужны, в SpecialTextPage.as, но я, очевидно, предпочел бы это, если бы могпросто расширьте его.

У меня возникло ощущение, что я не совсем понимаю взаимосвязь между объектами flash на сцене и классом документов.

Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 01 марта 2011

Я решил эту проблему, отключив автоматическое объявление экземпляров сцены.(Параметры публикации -> вкладка «Flash» -> снять флажок «Автоматически объявлять экземпляры сцены»)

Затем мне нужно было объявить pageTitle в моем классе TextPage как поле public :

public class TextPage extends MovieClip
{
    public var pageTitle:TextField;
    ...
}
0 голосов
/ 26 февраля 2011

Класс документа в основном берется и выгружается в первый кадр временной шкалы 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...