Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обращение к неопределённому методу в ссылке на подгружаемый swf (http://www.flasher.ru/forum/showthread.php?t=183495)

tsarapkabel 23.08.2012 15:00

Обращение к неопределённому методу в ссылке на подгружаемый 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 и иметь возможность обращаться к её публичным методам через эту ссылку?

Wolsh 23.08.2012 15:07

Интерфейс.

tsarapkabel 23.08.2012 15:40

Спасибо. Немного подробнее?

Создаю интерфейс:
Код 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);

Интересно узнать, есть ли более правильные способы.

Wolsh 23.08.2012 17:25

Есть. Интерфейс.
Код AS3:

import ISetLoc;
// переменная для использования как реализации интерфейса
var linkToSwf:ISetLoc = Loader.content as ISetLoc;
linkToSwf.setLoc(0, 0);
// а для работы как с дисплейным объектом приводим к дисплейному типу (Спрайт, Мувиклип если надо)
var swfClip:DisplayObject = Loader.content as DisplayObject;
this.addChild(swfClip);


illuzor 23.08.2012 18:25

tsarapkabel, http://blog.illuzor.com/2012/08/06/a...asses_methods/

tsarapkabel 23.08.2012 18:54

Цитата:

Сообщение от Wolsh (Сообщение 1093510)
Есть. Интерфейс.

Как DO всё работает, нет проблем, а вот как ISetLoc linkToSwf.setLoc(0, 0) отказывается, сославшись на null.

Цитата:

Сообщение от illuzor (Сообщение 1093531)
...

Спасибо, читаю!

fish_r 23.08.2012 19:02

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

Wolsh 23.08.2012 19:05

Цитата:

отказывается, сославшись на null.
Не понял. Так а Мейн подгружаемой-то реализует ISetLoc? Не было никогда проблем с этим. Проверьте детали. Документ-класс подгружаемой implements ISetLoc. Обязательно.

caseyryan 23.08.2012 19:29

Если подгружаемая SWF имеет другой ApplicationDomain то интерфейс не прокатит, пока приложение не будет загружено в тот же домен
Но что-то мне подсказывает, что Wolsh прав на счет применения интерфейса в документ классе

tsarapkabel 23.08.2012 20:05

Цитата:

Сообщение от Wolsh (Сообщение 1093539)
Мейн подгружаемой-то реализует ISetLoc?

Теперь ясно. :) Нет, не реализует. В данном случае хотел узнать способ обращения без изменения кода подгружаемой флешки.


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

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