что-то не так с моей инкапсуляцией, но я не знаю, что это такое:AS3 Почему я использую get/getter неправильно?
Я получил класс документа с именем Main привязан к сцене:
package {
import flash.display.MovieClip;
public class Main extends MovieClip
{
var chapter1:Chapter1;
public function Main() {
// constructor code
chapter1 = new Chapter1;
addChild(chapter1);
}
}
}
класса chapter1 привязанного к MovieClip:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Chapter1 extends MovieClip {
public var numberOfFrames:uint;
public function Chapter1()
{
numberOfFrames = 3;
//constructor
trace("Chapter 1 constructed");
Transition.moveFromTo();
}
public static function get getNumberOfFrames():uint
{
return numberOfFrames;
}
}
}
и класс под названием Transition, который я хотел бы использовать в качестве простой утилиты:
package {
public class Transition {
public var gotNumber:uint;
public function Transition() {
trace(Chapter1.getNumberOfFrames);
}
static public function moveFromTo()
{
/* in the end id like to use this as a utility working with
NumberOfFrames from a parent Chapter instance.*/
}
}
}
Я получаю сообщение об ошибке: «1120: доступ к неопределенному номеру свойстваOfFrames». поэтому сама функция геттера, по-видимому, не должна использовать numberOfFrames. Но я не понимаю, почему, поскольку все примеры, которые я нашел (хотя и работают только с двумя классами и без привязки), делают getter возвратом var так же. Я что-то пропустил?
thanx для информации. ключевое слово static легко удалить. но я думал, что создаю экземпляр Chapter1 с именем «chapter1» внутри главного конструктора с помощью нового ключевого слова и метода addChild(). Кажется, я тоже ошибаюсь. я думаю, я действительно не понимал создание экземпляров (darn) ... – gauguerilla
@gauguerilla Когда вы создаете мувиклип, вы действительно создаете экземпляр. Однако этот экземпляр напрямую не доступен вашему коду. Вы должны вызвать 'getChildByName()' против родительского клипа, чтобы получить ссылку на этот экземпляр. После этого вы сможете получить доступ к своим общедоступным свойствам/методам. – xxbbcc
@gauguerilla Если вы создаете свой клип в коде с помощью 'new', вы также можете просто сохранить ссылку на этот мувиклип в переменной-члене одного из ваших классов (где это имеет смысл), а затем получить к нему доступ позже. В этом случае вы можете избежать использования 'getChildByName()', что несколько дорого. – xxbbcc