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

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

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

Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
Post Как привести загруженный контент к интерфейсу

Всем привет. Столкнулся с такой проблемой: при попытке привести загруженный контент с document class BingoGame к интерфейсу IBingoGame методом
Код AS3:
var game:IBingoGame = (loader.content as IBingoGame)
в переменную попадает null, при попытке привести методом
Код AS3:
var game:IBingoGame = IBingoGame(loader.content)
возникает ошибка
Код:
TypeError: Error #1034: Type Coercion failed: cannot convert bingo.game::BingoGame@1bfdb0b1 to bingo.interfaces.IBingoGame.
	at bingo.shell::TabContent/::eventDownloadComplete()
при этом, если обратится к загруженному контенту так:
Код AS3:
(loader.content as MovieClip).activate(true);
то public функция activate, которая описана в интерфейсе, прекрасно вызывается.
Для наглядности привожу структуру зависимостей классов проекта (а может она вовсе не наглядная, но я старался ):
Название: project.jpg
Просмотров: 531

Размер: 39.2 Кб

Вообще смутили меня две вещи:
1. Если загрузить игру в главную флэшку (в Shell), то она прекрасно приводится к своему интерфейсу.
2. Если в лоадере написать:
Код AS3:
IBingoGame(loader.content);
то в дальнейшем, когда лоадер отдаст классу TabContent указатель на loader.content - в нем можно будет без проблем привести контент к интерфейсу игры - этот момент вообще похож на шаманство.
Лоадер загружается в главную флэшку shell один раз, затем из него берется класс LoaderBar и в дальнейшем, при с создании нового таба, создается экземпляр этого класса.
Прикрепляю файл с рисунком-схемой в zip-архиве, т.к. вложенный рисунок стал каким-то маленьким и неудобочитаемым
Вложения
Тип файла: zip project.zip (117.7 Кб, 66 просмотров)

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

Регистрация: Jun 2006
Сообщений: 164
А где в IBingoGame функция activate ? И по-моему Вы путаете диаграмму классов с чем то еще...

Старый 03.03.2009, 20:40
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 3  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Код AS3:
class BingoGame implements IBingoGame {

Старый 03.03.2009, 21:21
Anry_coolboy вне форума Посмотреть профиль Отправить личное сообщение для Anry_coolboy Найти все сообщения от Anry_coolboy
  № 4  
Ответить с цитированием
Anry_coolboy
 
Аватар для Anry_coolboy

Регистрация: Dec 2006
Адрес: Ukraine Lugansk
Сообщений: 188
Отправить сообщение для Anry_coolboy с помощью ICQ Отправить сообщение для Anry_coolboy с помощью Skype™
litebox сложновато описал проблему...

дело в том, что если загрузить clip1.swf, а потом в clip1.swf загрузить clip2.swf, то при при поптыке привести символы в clip2.swf к интерфесу, возвращается null
__________________
Работю в DigitalHouse

Старый 04.03.2009, 11:18
litebox вне форума Посмотреть профиль Отправить личное сообщение для litebox Найти все сообщения от litebox
  № 5  
Ответить с цитированием
litebox
 
Аватар для litebox

Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
insected - с UML я знаком совсем немножко - просто лень было рисовать взаимодействие в Word'е или Illustrator'е - так что за неграматную диаграмму прошу простить - рисовал просто для наглядности процесса. В IBingoGame и в BingoGame функция activate(value:Boolean):void присутствует, забыл указать ее на диаграмме.
BlooDHounD - спасибо за помощь, у меня это описано так:
Код AS3:
class BingoGame extends MovieClip implements IBingoGame
Anry_coolboy - изложил проблему намного проще
Попытаюсь еще раз чуть проще: в shell.swf загружается tab_manager.swf (класс TabManager и TabContent), а tab_manager.swf загружает в себя game.swf и привод ее к интерфейсу возвращает null. А если загрузить game.swf в shell.swf - то игра приводится к интерфейсу замечательно.

Старый 04.03.2009, 11:53
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Попробуйте все грузить в CurrentDomain - возможно создаются 2 разных интерфейса (один в загружающей флешке, другой - в загруженой), и соответственно, получается 2 разных интерфейса.
__________________
Hell is the possibility of sanity

Старый 04.03.2009, 12:18
litebox вне форума Посмотреть профиль Отправить личное сообщение для litebox Найти все сообщения от litebox
  № 7  
Ответить с цитированием
litebox
 
Аватар для litebox

Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
на данном этапе решил проблему так:
Код AS3:
private function getGameInterface(content:DisplayObject):IBingoGame
{
  return (content as IBingoGame);
}
 
private function getChatInterface(content:DisplayObject):IChatRoom
{
  return (content as IChatRoom);
}
т.е. в класс Shell прописал две функции, которые НИГДЕ не вызываются, и теперь в классе TabContent все приводится как надо - т.е. таким образом, видимо, добавил в главную флэшку данные о том, что такие интерфейсы существуют.
wvxvw - а что вы имеете ввиду под CurrentDomain, объясните пожалуйтса

Старый 04.03.2009, 12:50
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 8  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
http://www.flasher.ru/forum/showthread.php?t=121010

Старый 04.03.2009, 18:17
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 9  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
Сталкивался с такой проблемой. В данной ситуации флеш действительно создает два разных интерфейса с одинаковым именем. Как вариант решения: введи интерфейс в главную флэшку.
Код:
var tmp:IBingoGame;
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 04.03.2009, 19:02
litebox вне форума Посмотреть профиль Отправить личное сообщение для litebox Найти все сообщения от litebox
  № 10  
Ответить с цитированием
litebox
 
Аватар для litebox

Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
Да, два указателя на интерфейсы действительно красивее, чем две функции, которые я нигде не вызываю; ограничился локальными переменными в конструкторе:
Код AS3:
public function Shell()
{
  var tmpBingoGame:IBingoGame;
  var tmpChatRoom:IChatRoom;
}
и все работает

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

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

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


 


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


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