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

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

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

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
По умолчанию Обращение к неопределённому методу в ссылке на подгружаемый swf

Loader'ом подгружается swf. В swf есть публичный метод: setLoc(xPos:int, yPos:int).

Можно обратиться к этому методу сразу:
Код AS3:
LoaderInfo.content.setLoc(12, 34);
Однако, сохраняя ссылку на swf как Sprite:
Код AS3:
var spr:Sprite = new Sprite();
spr = LoaderInfo.content;
теряется возможность обращаться к публичному методу
Код AS3:
spr.setLoc(0, 0);
ибо метод сей в Спрайте не определён.

Как быть в таком случае? Как получить ссылку на подгружаемую swf и иметь возможность обращаться к её публичным методам через эту ссылку?
__________________
Нормально делай — нормально будет!

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Интерфейс.
__________________
Reality.getBounds(this);

Старый 23.08.2012, 15:40
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 3  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Спасибо. Немного подробнее?

Создаю интерфейс:
Код AS3:
package {
	public interface ISetLoc {
		function setLoc(xPos:uint, yPos:uint):void;
	}
}
Создаю ссылку на swf:
Код AS3:
var isetloc:ISetLoc;
isetloc = LoaderInfo.content as ISetLoc;
trace(isetloc);	// null, далее ни addChild, ни setLoc
Добавлено через 1 час 7 минут
Пока решил проблему так:
Код AS3:
var linkToSwf:* = Loader.content;
this.addChild(linkToSwf);
linkToSwf.setLoc(0, 0);
Интересно узнать, есть ли более правильные способы.
__________________
Нормально делай — нормально будет!

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Есть. Интерфейс.
Код AS3:
import ISetLoc;
// переменная для использования как реализации интерфейса
var linkToSwf:ISetLoc = Loader.content as ISetLoc;
linkToSwf.setLoc(0, 0);
// а для работы как с дисплейным объектом приводим к дисплейному типу (Спрайт, Мувиклип если надо)
var swfClip:DisplayObject = Loader.content as DisplayObject;
this.addChild(swfClip);
__________________
Reality.getBounds(this);

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

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
tsarapkabel, http://blog.illuzor.com/2012/08/06/a...asses_methods/

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

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Есть. Интерфейс.
Как DO всё работает, нет проблем, а вот как ISetLoc linkToSwf.setLoc(0, 0) отказывается, сославшись на null.

Цитата:
Сообщение от illuzor Посмотреть сообщение
...
Спасибо, читаю!
__________________
Нормально делай — нормально будет!

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

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Есть ещё способ. Сделать swc с классами из swf-шки, но без вкомиливания в проект ( в фд "External library" ), типы будут объявлены в основной флешке, но сами классы станут доступными только после загрузки swf. После загрузки уже привести объект к нужному типу.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
отказывается, сославшись на null.
Не понял. Так а Мейн подгружаемой-то реализует ISetLoc? Не было никогда проблем с этим. Проверьте детали. Документ-класс подгружаемой implements ISetLoc. Обязательно.
__________________
Reality.getBounds(this);

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Если подгружаемая SWF имеет другой ApplicationDomain то интерфейс не прокатит, пока приложение не будет загружено в тот же домен
Но что-то мне подсказывает, что Wolsh прав на счет применения интерфейса в документ классе

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

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Мейн подгружаемой-то реализует ISetLoc?
Теперь ясно. Нет, не реализует. В данном случае хотел узнать способ обращения без изменения кода подгружаемой флешки.
__________________
Нормально делай — нормально будет!

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

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

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


 


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


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