Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Структура написания приложения (http://www.flasher.ru/forum/showthread.php?t=197609)

Psycho Tiger 13.04.2013 10:19

Ну, я бы сделал вот так (код писал прямо на форуме, не ручаюсь что работает):
Код AS3:

class AbstractStep extends Sprite {
public static const GAME_SCREEN:String = 'gameScreen';
public static const LOAD_SCREEN:String = 'loadScreen';
protected function gotoScreen(screenName):void{
//вызываем на рассылку собственное событие, внутри передаем screenName
dispatchEvent(new MyEvent(MyEvent.CHANGE_SCREEN, screenName));
}
}

Классы наследуются от AbstractStep.
Код AS3:

class Game extends AbstractStep

Когда нужно перейти на другой экран, то дёргается метод AbstractStep'а.
Т.е. внутри Game, например:
Код AS3:

gotoScreen(LOAD_SCREEN);

А в Main:
Код AS3:

private var _currentScreen:AbstractScreen;
private var _hash:Object ={}
public function Main(){
//присваиваем классы
_hash[AbstractScreen.GAME] = Game;
_hash[AbstractScreen.LOAD_SCREEN] = LoadScreen;
_currentScreen = new Game();
addChild(_currentScreen);
_currentScreen.addEventListener(MyEvent.CHANGE_SCREEN, onScreenChanged);
}
 
private function onScreenChanged(event:MyEvent):void{
_currentScreen.removeEventListener(MyEvent.CHANGE_SCREEN, onScreenChanged);
removeChild(_currentScreen);
_currentScreen = _hash[event.screenName]();
addChild(_currentScreen);
_currentScreen.addEventListener(MyEvent.CHANGE_SCREEN, onScreenChanged);
}


Wolsh 13.04.2013 10:44

Цитата:

Также, при выходе из класса Game как я скажу классу Main чтоб он обнулил класс Game и запустил класс Menu? Хм... По идее Main слушает все классы, но я не пойму как сделать прослушивание не покадрово, не с какой-то переодичностью типа таймера, а чтоб память не засорялась. Т.е. чтоб прослушка не была ежесекундной к примеру, а чтоб Game сказал классу Main что игра окончилась и все, а не было постоянной проверки окончилась ли игра, в игре ведь и так расчетов много очень, нефиг проц грузить.
События. Main слушает событие GameEvent.GAME_OVER от Game. Тот посылает это событие, когда игра закончилась. Мейн ловит его, обнуляет игру и показывает меню.
И так со всем.

Babylon 13.04.2013 15:19

Psycho Tiger,
var xml=<screens>
<screen id="1" name="gameScreen"/>
<screen id="2" name="loadScreen"/>
</screens>
var screen:XMLList=xml.screen.(@id=='1').

in4core 13.04.2013 15:27

Babylon - действительно зачем придумывать архитектуры разные, паттерны проектирования и т.п. - когда есть xml - который можно пихнуть отовсюду... ужос

Babylon 13.04.2013 15:31

В чем противоречия между ПП и Xml? Если XML относится к модели, чем плохо?

in4core 13.04.2013 15:34

Ну причем тут вообще хмл как таковой? Хмл - если вы вкурсе - язык разметки. Тоесть отдельный язык так сказать. As3 - язык. Никто не против совмещать 2 языка, и это приходится делать в ряде стандартов, но не стоит в любую кашу сувать другой язык. Я могу поддержать вас только в том, что это ваша фича ( или баг хД) - что никто так не делает собственно.
хмл он для чего нужен по сути? для удобства работы с данными, которые переданы из вне. Будь это конфиг или локализатор.

caseyryan 13.04.2013 15:45

Цитата:

хмл он для чего нужен по сути? для удобства работы с данными, которые переданы из вне. Будь это конфиг или локализатор.
Совсем нет. Я частенько использую XML вшитый в программу. Просто потому что это удобный формат хранения данных, с простой и понятной структурой

Babylon 13.04.2013 16:00

XML - язык разметки только для веб дизайнеров, а для кодеров это не что другое. Для некоторых конечно нет ничего хорошего в разметке модели, рендеринге видов и внешнем коммандере :)

Александр Мостовой 13.04.2013 17:59

С xml работать впринципе можно как с быстрым промежуточным вариантом, но только если следовать правилу: изменять его только через методы и сеттеры соотвтетствующего объекта-хранителей этого XML.
Тогда не сложно будет в случае необходимости перейти на более формализованную структуру.

СлаваRa 13.04.2013 18:02

Xml избыточен


Часовой пояс GMT +4, время: 22:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.