Класс панорамирования во Flash AS3
У меня есть мувиклип, и я собираюсь добавить к нему функцию панорамирования. Я хочу добавить кастрюлю как собственный класс, на который может ссылаться мувиклип.
Когда я создаю класс панорамы, я отправляю ему мувиклип, чтобы у меня всегда были свойства положения.
Каков наилучший способ получить доступ к сцене в классе панорамирования? Мне нужно будет иметь возможность получить stage mouseX, mouseY, stageWidth и stageHeight.
Прямо сейчас у меня есть класс pan, расширяющий объект sprite и фактически добавляющий его как дочерний элемент мувиклипа, который я хочу панорамировать.
Было бы лучше просто отправить саму сцену в класс панорамирования или есть лучший способ, чем этот?
1 ответ
Создайте одноэлементный класс, который управляет изменениями на этапе под названием StageManager
и инициализировать его, передав ему ссылку на этап:
//StageManager.as
import flash.display.Stage;
public class StageManager()
{
//publicly accessible singleton instance
public static var instance:StageManager = new StageManager();
private var m_stage:Stage;
//I'm using a custom getter and setter in just in case you need perform some other
//initialization when the stage gets set...
public function set stage(stg:Stage):void
{
m_stage = stg;
}
public function get stage():Stage
{
return m_stage;
}
}
Тогда где-то еще, как вы, главный контроллер класса:
StageManager.instance.stage = this.stage;
Теперь вы можете получить доступ к сцене и ее свойствам через StageManager
:
var stageW:int = StageManager.instance.stage.stageWidth;
Таким образом, не только вы, пан-класс, но и все, что в будущем, может выйти на глобальную сцену в любое время. Довольно круто, а?
Что касается дизайна вашего класса Pan, я согласен с @The_asMan - продлите MovieClip
, Если только один Pan
Экземпляр будет контролировать несколько MovieClip
экземпляры, тогда, вероятно, было бы более разумно иметь это как свою собственную вещь (как вы описали выше).