Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 02.01.2011, 19:05
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 1  
Ответить с цитированием
Alexmody

Регистрация: 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 нужного окна
            }
}
//Каждое окно содержит функцию GetParam(), которая возвращает соответствующие
текущему окну данные в виде ассоциативного массива 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);
Таким образом, окно CGameMap получает данные из окна CGamePage.

Пожалуйста, предложите свои варианты по обмену данными между оконами или
подкорректируйте текущий.


Последний раз редактировалось Alexmody; 04.01.2011 в 09:39.
Создать новую тему   Часовой пояс GMT +4, время: 05:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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