![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 16
|
Слепил следующий головняк, в кратце:
Приложение в контакте Main.swf. c дополнительным модулем Game.swf Для "общения" модулей написал свой класс события 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"); } } } public function aPlay(E:MouseEvent):void { ............ //Создаем и посылаем событие---------------- var myEvent:GameEvent=new GameEvent(GameEvent.MJ_GAME_START); myEvent.MJ_levelData = new XML(dataBase.resultList);//передаем данные dispatchEvent(myEvent); } ..... MJ.addEventListener(GameEvent.MJ_GAME_START, aStartMission); .... public function aStartMission(e:GameEvent):void { .... trace(e.MJ_levelData); .... } TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать App::GameEvent@184022a9 в App.GameEvent. at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at App::MissionForm/aPlay() |
|
|||||
|
Регистрация: 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() 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));//вот тут ошибка } } } Последний раз редактировалось alexxus; 23.08.2012 в 12:18. |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
Как грузится файл? В какой ApplicationDomain? AllowScriptAccess есть?
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 16
|
- Объект подгружается Loader`ом
- В родителе и подгружаемом объектах прописано Security.allowDomain("*"); буду копать в сторону LoaderContext... AllowScriptAccess - про это даже ни-ни Добавлено через 35 минут В загрузчик добавил LoaderContext 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, время: 02:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|