Решил разобраться с ООП в as3.0 на примере создания игры.
Игра будет иметь несколько локаций, на каждой из которых нужно выполнить определенные действия для перехода к следующей.
На первом этапе игра не будет иметь инвентаря и решение головоломок должно осуществляться по простой схеме - определенной последовательности взаимодействия с интерактивными объектами.
Игру продумал, но испытываю трудность с правильным созданием архитектуры.
Вот список классов, которые я планирую создать:
- Game - основной класс. Запускает менеджер дисплеев
- DisplayManager - управление дисплеями. Описывает все локации и их объекты, а так же устанавливает слушатели на объекты и проверяет условия взаимодействия с объектами
- Objects - динамические элементы. Описание всех интерактивных объектов включая игрового персонажа
Приведу код в котором я частично пытаюсь отразить данную структуру.
Game.as

Код AS3:
package src {
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import src.DisplayManager;
public class Game extends MovieClip {
// Переменные
public static var STAGE:Stage;
// Конструктор
public function Game() {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
// Методы класса
private function init(e:Event = null):void {
STAGE = this.stage;
}
}
}
Так же в Game.as я пытаюсь создать ссылку на сцену, которую можно было бы использовать в других классах для добавления объектов на сцену.
DisplayManager.as

Код AS3:
package src {
import flash.display.MovieClip;
import flash.display.Stage;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.events.Event;
import src.Main;
public class DisplayManager extends MovieClip {
// Экземпляры
public var location1:Location1 = new Location1();
public var location2:Location2 = new Location2();
// Переменные
public var currentDisplay = 0;
// Конструктор
public function DisplayManager() {
// Координаты
location1.x, location1.y = 0;
location2.x, location2.y = 0;
// Слушатели
location1.addEventListener(MouseEvent.CLICK, displaySwitcher);
}
// Методы класса
public function displaySwitcher(event:MouseEvent):void {
switch (currentDisplay) {
case 0:
Main.STAGE.addChild(location1);
break;
case 1:
Main.STAGE.addChild(location2);
break;
}
currentDisplay++;
}
}
}
В DisplayManager.as я пробую создаю функцию проверки текущего дисплея и переключение между ними, но очевидно, что то делаю не так.
В результате программа запускается без ошибок, но и без добавления объектов - локаций на сцену.
Крайне нуждаюсь в советах и подсказках.