Показать сообщение отдельно
Старый 16.09.2016, 13:34
lesnoj вне форума Посмотреть профиль Отправить личное сообщение для lesnoj Найти все сообщения от lesnoj
  № 1  
Ответить с цитированием
lesnoj
 
Аватар для lesnoj

Регистрация: Mar 2014
Сообщений: 27
Question ООП и архитектура простой игры

Решил разобраться с ООП в as3.0 на примере создания игры.

Игра будет иметь несколько локаций, на каждой из которых нужно выполнить определенные действия для перехода к следующей.
На первом этапе игра не будет иметь инвентаря и решение головоломок должно осуществляться по простой схеме - определенной последовательности взаимодействия с интерактивными объектами.

Игру продумал, но испытываю трудность с правильным созданием архитектуры.
Вот список классов, которые я планирую создать:
  1. Game - основной класс. Запускает менеджер дисплеев
  2. DisplayManager - управление дисплеями. Описывает все локации и их объекты, а так же устанавливает слушатели на объекты и проверяет условия взаимодействия с объектами
  3. 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 я пробую создаю функцию проверки текущего дисплея и переключение между ними, но очевидно, что то делаю не так.

В результате программа запускается без ошибок, но и без добавления объектов - локаций на сцену.
Крайне нуждаюсь в советах и подсказках.


Последний раз редактировалось lesnoj; 16.09.2016 в 13:44.