|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
Как привести загруженный контент к интерфейсу
Всем привет. Столкнулся с такой проблемой: при попытке привести загруженный контент с document class BingoGame к интерфейсу IBingoGame методом
в переменную попадает null, при попытке привести методом
возникает ошибка
TypeError: Error #1034: Type Coercion failed: cannot convert bingo.game::BingoGame@1bfdb0b1 to bingo.interfaces.IBingoGame. at bingo.shell::TabContent/::eventDownloadComplete() Для наглядности привожу структуру зависимостей классов проекта (а может она вовсе не наглядная, но я старался ): Вообще смутили меня две вещи: 1. Если загрузить игру в главную флэшку (в Shell), то она прекрасно приводится к своему интерфейсу. 2. Если в лоадере написать: то в дальнейшем, когда лоадер отдаст классу TabContent указатель на loader.content - в нем можно будет без проблем привести контент к интерфейсу игры - этот момент вообще похож на шаманство. Лоадер загружается в главную флэшку shell один раз, затем из него берется класс LoaderBar и в дальнейшем, при с создании нового таба, создается экземпляр этого класса. Прикрепляю файл с рисунком-схемой в zip-архиве, т.к. вложенный рисунок стал каким-то маленьким и неудобочитаемым |
|
|||||
Регистрация: Jun 2006
Сообщений: 164
|
А где в IBingoGame функция activate ? И по-моему Вы путаете диаграмму классов с чем то еще...
|
|
|||||
стервочка (я мужик)
|
|
|
|||||
litebox сложновато описал проблему...
дело в том, что если загрузить clip1.swf, а потом в clip1.swf загрузить clip2.swf, то при при поптыке привести символы в clip2.swf к интерфесу, возвращается null
__________________
Работю в DigitalHouse |
|
|||||
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
insected - с UML я знаком совсем немножко - просто лень было рисовать взаимодействие в Word'е или Illustrator'е - так что за неграматную диаграмму прошу простить - рисовал просто для наглядности процесса. В IBingoGame и в BingoGame функция activate(value:Boolean):void присутствует, забыл указать ее на диаграмме.
BlooDHounD - спасибо за помощь, у меня это описано так: Anry_coolboy - изложил проблему намного проще Попытаюсь еще раз чуть проще: в shell.swf загружается tab_manager.swf (класс TabManager и TabContent), а tab_manager.swf загружает в себя game.swf и привод ее к интерфейсу возвращает null. А если загрузить game.swf в shell.swf - то игра приводится к интерфейсу замечательно. |
|
|||||
Modus ponens
|
Попробуйте все грузить в CurrentDomain - возможно создаются 2 разных интерфейса (один в загружающей флешке, другой - в загруженой), и соответственно, получается 2 разных интерфейса.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
на данном этапе решил проблему так:
private function getGameInterface(content:DisplayObject):IBingoGame { return (content as IBingoGame); } private function getChatInterface(content:DisplayObject):IChatRoom { return (content as IChatRoom); } wvxvw - а что вы имеете ввиду под CurrentDomain, объясните пожалуйтса |
|
|||||
|
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
Сталкивался с такой проблемой. В данной ситуации флеш действительно создает два разных интерфейса с одинаковым именем. Как вариант решения: введи интерфейс в главную флэшку.
|
|
|||||
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
Да, два указателя на интерфейсы действительно красивее, чем две функции, которые я нигде не вызываю; ограничился локальными переменными в конструкторе:
и все работает |
Часовой пояс GMT +4, время: 16:59. |
|
« Предыдущая тема | Следующая тема » |
|
|