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

Регистрация: Apr 2010
Сообщений: 170
По умолчанию Разные swf и одно событие

Всем доброго дня!

Смотрите как у меня получается, есть два проект: loader и game. В обоих проектах имеется класс GameEvent, который наследуется от класса Event. Суть такова, что вначале запускается loader, он грузит game и когда он его загрузил, то он подписывается на событие:

Код AS3:
addEventListener(GameEvent.READY,OnGameEventReady);
 
// ...
 
// Клип game.swf готов к работе
private function OnGameEventReady(_event:GameEvent):void
{
	removeEventListener(GameEvent.READY,OnGameEventReady);
 
	objGame.pGameLoader.funInviteFriends=VKDShowInviteBox;			
	objGame.startGame();
}
То есть я как бы ловлю от подгруженного клипа событие что тот выполнил определённый сценарий и после уже присваиваю его переменным нужные значения. То есть из loader я хочу обратиться к переменной в game, которая указывает на экземпляр класса в котором я хочу установить свои значения для переменных. И если я обращусь туда раньше чем этот экземпляр был создан, то произойдёт ошибка. Именно для этого я и хочу получать от game создал ли он экземпляр.

В самом же game 1 в 1 тот же самый код класса GameEvent:

Код AS3:
package D 
{
	import flash.events.Event;
 
	// Событие игры
	public class GameEvent extends Event
	{
		public static const READY			:String		= "D_GameEvent";
 
		public var dataType:String=null;					// Тип события
 
		public function GameEvent(_dataType:String)
		{
			dataType=_dataType;
 
			super(dataType,true,false);
		}
 
	}
 
}
И когда game готов, делаю:

Код AS3:
dispatchEvent(new GameEvent(GameEvent.READY));
Событие приходит в loader, но возникает ошибка преобразования (или как она там). Он не может отосланный класс преобразовать в принимаемый. Помогает тупая замена:

Код AS3:
// Клип game.swf готов к работе
private function OnGameEventReady(_event:*):void
{
	removeEventListener(GameEvent.READY,OnGameEventReady);
 
	objGame.pGameLoader.funInviteFriends=VKDShowInviteBox;
 
	objGame.startGame();
}
Если для данной ситуации это терпимо (хоть и не правильно), то что будет когда мне надо будет у события извлекать параметры?!

Есть ли какой-то способ правильно получать событие?

Добавлено через 9 минут
Конечно можно так:

Код AS3:
// Клип game.swf готов к работе
private function OnGameEventReady(_event:*):void
{
	removeEventListener(GameEvent.READY,OnGameEventReady);
 
	var event:GameEvent=_event as GameEvent;
 
	objGame.pGameLoader.funInviteFriends=VKDShowInviteBox;
	objGame.startGame();
}
Только на сколько это правильно.