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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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();
}
Только на сколько это правильно.

Старый 27.01.2012, 14:16
carrotoff вне форума Посмотреть профиль Отправить личное сообщение для carrotoff Найти все сообщения от carrotoff
  № 2  
Ответить с цитированием
carrotoff
 
Аватар для carrotoff

Регистрация: May 2010
Сообщений: 543
Цитата:
И если я обращусь туда раньше чем этот экземпляр был создан, то произойдёт ошибка. Именно для этого я и хочу получать от game создал ли он экземпляр.
После того, как в game сработает Event.INIT, а уже тем более Event.COMPLETE, можно спокойно обращаться к его доступным методам и свойствам. Потому не вижу необходимости в GameEvent.READY

По поводу вопроса: не знаю как у вас там всё так интересно устроено, что получаете ошибку преобразования, но

_event:*

так не стоит делать. Раз ваш GameEvent наследуется от Event, то и приводите к этому типу
_event:Event.
А потом кастуйте к вашему типу GameEvent.
Код AS3:
_event as GameEvent;
ну как у вас в принципе и сделано
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с)

Старый 27.01.2012, 20:27
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 3  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Цитата:
В обоих проектах имеется класс GameEvent
Если два разных файла с классами то и классы по сути будут разными, даже если одинаково называются. Для нормальной работы нужно чтобы loader и game при компиляции использовали один и тот же файл.

Вынесите общие классы для обеих проектов в одну библиотеку и подключите ее в оба проекта.

И если возникла ошибка преобразования типа то
Код AS3:
var event:GameEvent=_event as GameEvent;
также не поможет, ошибки не будет, но event будет равен null

И кстати, не критично, но с символа "_" принято начинать внутренние поля класса (private или protected) в не локальные переменные или аргументы функций.


Последний раз редактировалось Stitch512; 27.01.2012 в 20:33.
Старый 28.01.2012, 00:00
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Stitch512 Посмотреть сообщение
Если два разных файла с классами то и классы по сути будут разными, даже если одинаково называются. Для нормальной работы нужно чтобы loader и game при компиляции использовали один и тот же файл.
Да пофиг на файлы. Аппдомены разные. Вот и вся суть. Загружайте game в Application.currentDomain и будет вам щастие.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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