![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
Разрабатываю флеш игру.
Есть класс СPageManager, который регистрирует новые окна (напр. CMainMenuPage, CGamePage, CMapPage, СCreditsPage и пр.) занося их в массив и далее уже проводит манипуляции с этими окнами. Все окна наследуются от класса СBasePage. События, типа при нажатии кнопки Play (закрытие CMainMenuPage и показ CGamePage) можно реализовать через кастомные события (dispatchEvent) или же можно потомкам (окнам) передавать ссылку на экземпляр СPageManager. Итак, вот код создания и регистрации окна в CPageManager: //в функцию передается граф объект из src библиотеки напр. CMenuComponent и пр. pageManager.registerPage(new CMenuPage(new CMenuComponent())); pageManager.registerPage(new CCreditsPage(new CCreditsComponent())); pageManager.registerPage(new CGamePage(new CGameComponent())); pageManager.registerPage(new CMapPage(new CMapComponent())); и пр. (обмена) данных между окнами, например из окна CGamePage мне надо передать значение score и прочие данные в окно CMapPage. Как лучше это организовать? Количество передаваемых параметров не ограничено. Можно сделать так: //Класс СPageManager содержит public GetPage()
//функцию возврата зарегистрированного окна по объекту Class:
public class CPageManager extends Sprite
{
private var arrPages:Array;
public function GetPage (page:Class):СBasePage
{
//…выборка из массива по типу-значению Class
//return нужного окна
}
}
текущему окну данные в виде ассоциативного массива Object:
public function GetParam():Object
{
var param:Object = new Object();
param["score"] = 20;
param["time"] = 4000;
return param;
}
Каждое окно (напр.CGameMap) содержит переданную ссылку pageManager на родительский менеджер окон CPageManager, у которого вызываем описанную выше функцию GetPage() и уже далее обращаясь к функции GetParam(): для получения нужного окна из массива: //внутри класса CGameMap var param:Object = (this.pageManager.GetPage(CGamePage) as CGamePage).GetParam(); trace(param.score); trace(param.time); Пожалуйста, предложите свои варианты по обмену данными между оконами или подкорректируйте текущий. Последний раз редактировалось Alexmody; 04.01.2011 в 09:39. |
![]() |
Часовой пояс GMT +4, время: 05:25. |
|
|
« Предыдущая тема | Следующая тема » |
|
|