![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
Решил разобраться с ООП в as3.0 на примере создания игры.
Игра будет иметь несколько локаций, на каждой из которых нужно выполнить определенные действия для перехода к следующей. На первом этапе игра не будет иметь инвентаря и решение головоломок должно осуществляться по простой схеме - определенной последовательности взаимодействия с интерактивными объектами. Игру продумал, но испытываю трудность с правильным созданием архитектуры. Вот список классов, которые я планирую создать:
Приведу код в котором я частично пытаюсь отразить данную структуру. Game.as 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; } } } DisplayManager.as 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++; } } } В результате программа запускается без ошибок, но и без добавления объектов - локаций на сцену. Крайне нуждаюсь в советах и подсказках. Последний раз редактировалось lesnoj; 16.09.2016 в 13:44. |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
что это?
Цитата:
|
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
Это попытки заставить работать код всеми возможными и невозможными путями.
Удалил. |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
теперь единственное что делает Main - инициализирует переменную STAGE.И еще инициализация сложных типов прямо после объявления - плохая практика.
|
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
Цитата:
package src { import flash.display.MovieClip; import src.DisplayManager; public class Game extends MovieClip { public var displayManager:DisplayManager = new DisplayManager(); // Конструктор public function Game() { displayManager.displaySwitcher(); } } } Подскажите как это сделать правильно, для того чтобы к ней можно было обращаться из других классов для добавления объектов на сцену? Последний раз редактировалось lesnoj; 16.09.2016 в 14:26. |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
Какая-то каша.
Что является документ классом Game или Main? |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
Классом является Game. Исправил.
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
изучай
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
забыл добавить выставление curScreen в showScreen
package { import flash.display.DisplayObjectContainer; /** * ... * @author */ public class DisplayManager { private static var root:DisplayObjectContainer; private static var screens:Array; private static var curScreen:int =-1; public static function init(_root:DisplayObjectContainer):void { root = _root; screens = []; } public static function addScreen(screen:DisplayObjectContainer):void { screens.push(screen); } public static function showScreen(n:int):void { if (curScreen !=-1 && screens && screens[curScreen].parent) { screens[curScreen].parent.removeChild(screens[curScreen]); } if (screens[n]) { root.addChild(screens[n]); curScreen = n; } } public static function get rootDO():DisplayObjectContainer { return root; } } } |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
Спасибо, буду изучать.
Подскажите в каком виде лучше хранить информацию о дисплеях, такую как: координаты экрана на сцене, координаты объектов и персонажей на экране, слушатели взаимодействия с объектами и т.п.? Использовать для этого один общий класс или отдельные классы или xml или что то другое? Последний раз редактировалось lesnoj; 16.09.2016 в 17:13. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:46. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| классы , ООП |
|
|