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

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

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

Регистрация: Dec 2010
Сообщений: 16
По умолчанию Error #1034: Ошибка типа Coercion: невозможно преобразовать ...Event

Слепил следующий головняк, в кратце:
Приложение в контакте Main.swf. c дополнительным модулем Game.swf
Для "общения" модулей написал свой класс события

Код AS3:
package App{
 
	import flash.events.Event;
 
	public class GameEvent extends Event {
 
		//Описываем используемые классом  TetrisKernel типы событий
		public static const MJ_GAME_START:String="onMJGameStart";//начало игры
 
		public var MJ_levelData:XML;
		//Конструктор события
		public function GameEvent(type:String,  bubbles:Boolean=false, cancelable:Boolean=false){
			super(type, bubbles, cancelable); 
		}
 		public override function clone():Event
		{
			return new GameEvent(type, bubbles, cancelable);
		}
	           public override function toString():String
                      {
                                  return formatToString("GameEvent", "type", "bubbles", "cancelable", "eventPhase");
                      }
}
 
}
В классе модуля Game.swf генерим необходимое событие:

Код AS3:
public function aPlay(E:MouseEvent):void {
	............		
       //Создаем и посылаем событие----------------
       var myEvent:GameEvent=new GameEvent(GameEvent.MJ_GAME_START);
 
       myEvent.MJ_levelData = new XML(dataBase.resultList);//передаем данные  
	dispatchEvent(myEvent);	
}
В классе модуля Main.swf ловим данное событие:
Код AS3:
.....
MJ.addEventListener(GameEvent.MJ_GAME_START, aStartMission);
....
 
 
public function aStartMission(e:GameEvent):void {
....
trace(e.MJ_levelData);
....
}
Вся эта конструкция без проблем работает из контакта и локально, НО, когда я запускаю базовый модуль Main.swf в Adobe Flash CS4 а Game.swf подкачиваю с сервера контакта то в строке диспетчеризации события GameEvent возникает ошибка
TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать App::GameEvent@184022a9 в App.GameEvent.
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at App::MissionForm/aPlay()

Старый 23.08.2012, 12:08
alexxus вне форума Посмотреть профиль Отправить личное сообщение для alexxus Найти все сообщения от alexxus
  № 2  
Ответить с цитированием
alexxus

Регистрация: Dec 2010
Сообщений: 16
Уже 1,5 года прошло, и опять наткнулся на такую ошибку ((( апну..

Добавлено через 4 минуты
Вся беда та же. Подгружаемый файл должен сгенерить событие подгружающему в классе STEvent. Если подгружаем локальный файл, то все норм. Если подгружаем из сети, все таже ошибка

TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать App::STEvent@2dc3df41 в App.STEvent.
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at App::STEvent$/saveSound()
at App::Tetris/aSound()

Код AS3:
package App{
 
	import flash.events.Event;
	import flash.display.MovieClip;
 
    //Расширяем функциональность класса EVENT (событие), под наши нужды
	public class STEvent extends Event {
 
		public static const SAVE_SOUND:String="SAVE_SOUND";
 
		public var user_sound:Boolean;//сколько рядов сняли в последний раз
		//Конструктор события--------------------------------------------------------------------
		public function STEvent(type:String){
			super(type); 
 
		}
		//-------------------------------------------------------------------------------------
		public static function saveSound(dispatcher:MovieClip, pSound:Boolean){
			var newEvent:STEvent = new STEvent(SAVE_SOUND);
			newEvent.user_sound = pSound;
			dispatcher.dispatchEvent(STEvent(newEvent));//вот тут ошибка
		}
 
 
	}
 
}
код слушателя
Код AS3:
...
ST.addEventListener(STEvent.SAVE_SOUND, aSTsaveSound);
...
public function aSTsaveSound(e:STEvent):void {
 
			this.user_sound = int(e.user_sound);
			...
}


Последний раз редактировалось alexxus; 23.08.2012 в 12:18.
Старый 23.08.2012, 16:03
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 3  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Как грузится файл? В какой ApplicationDomain? AllowScriptAccess есть?

Старый 23.08.2012, 16:27
alexxus вне форума Посмотреть профиль Отправить личное сообщение для alexxus Найти все сообщения от alexxus
  № 4  
Ответить с цитированием
alexxus

Регистрация: Dec 2010
Сообщений: 16
- Объект подгружается Loader`ом
- В родителе и подгружаемом объектах прописано Security.allowDomain("*");
буду копать в сторону LoaderContext...
AllowScriptAccess - про это даже ни-ни

Добавлено через 35 минут
В загрузчик добавил LoaderContext
Код AS3:
var rLoaderContext: LoaderContext = new LoaderContext();
rLoaderContext.applicationDomain = ApplicationDomain.currentDomain;
this.rLoader.load(rUrlRequest, rLoaderContext);
Не помогло.
Пробовал rLoaderContext.allowCodeImport = true;
Загружаемый файл лежит вконтакте.
Кстати, если главный (тоже лежит на сервере контакта), запускать из контакта, тоже не работает.

Если я правильно понял, ошибка в том, что класс ивента в диспетчере (загружаемого файла) не совпадает с классом в лисенере базового файла.
Если rLoaderContext.applicationDomain = null, то классы STEvent в файлах не совпадают, т.е. загружаемый файл изменяет класс STEvent на STEvent@2dc3df41, что бы он не конфликтовал с классом загружающего файла.
rLoaderContext.applicationDomain = ApplicationDomain.currentDomain; - если мы в лоадере пишем так, то контекст класса STEvent в загружаемом файле должен заменяться контекстом класса STEvent в загружающем классе. Но это не происходит.


Последний раз редактировалось alexxus; 23.08.2012 в 17:22.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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