Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загрузка в SWF другой SWF и использование его методов (http://www.flasher.ru/forum/showthread.php?t=126923)

Adomax 30.06.2009 17:27

Загрузка в SWF другой SWF и использование его методов
 
Есть основной swf с назначенным ему классом AS3. в него пытаюсь загрузить другой swf, у которого в свою очередь свой класс. При попытке обратиться к методам загруженного swf из Основного swf возникает ошибка - TypeError: Error #1006: playerList не является функцией.
Код AS3:

                private function onChatBtn(event:Event)
                {
 
                        var context:LoaderContext = new LoaderContext();
                        context.checkPolicyFile = true;
 
                        chatLoader = new Loader();
                        chatLoader.contentLoaderInfo.addEventListener( Event.INIT, loadChat );
                        chatLoader.load( new URLRequest("http://127.0.0.1/chat.swf"),context );
 
                }
                public function loadChat(event:Event)
                {
                        var arr:Array = ["1","2"];
                        var chatMovie:* = event.target.content;
                        this.addChild(chatMovie);
                        chatMovie.playerList(arr);
                        //chatMovie.chatStart(socket);
                }

в загруженном SWF есть метод:
Код AS3:

                public function playerList(list:Array)
                {
                        plList = list;
                        this.playerSpis.text=plList.join("\n");
                }

оба файла находятся в корне одного домена, там же лежит crossdomain.xml

Добавлено через 2 минуты
в конструкторах классов обоих swf имеется след. код:
Код AS3:

Security.loadPolicyFile('http://localhost/crossdomain.xml');                        
                        Security.loadPolicyFile('xmlsocket://localhost:666');
                        Security.allowDomain("http://127.0.0.1/");

в приложении используется и обычная загрузка и загрузка через сокет

mre 30.06.2009 18:13

Используйте интерфейсы.

Партизан 01.07.2009 01:20

А чем считает флеш playerList?
Т.е. если ошибка типа хотелось бы понять что по чем... Я там звездочку видел, мало ли...

Gal4enochek 01.07.2009 11:50

Я что-то подобное делала, у меня так работает:
Код AS3:

private var swf_loader                                : Loader;
//....
swf_loader = new Loader();
swf_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadSWFCompleteHandler);
swf_loader.load(new URLRequest(DataContainer.BITMAP_SWF_PATH));
//...
 
private function loadSWFCompleteHandler(event :Event):void{
        var lib :Object = swf_loader.content;
        var bmp :BitmapData = lib.getBitmapData(id); // вызов функции из класса в загруженной свф-ке
}


Snut 01.07.2009 12:07

Adomax, куда типизацию потеряли?

dimarik 01.07.2009 12:24

Сравните

Код AS3:

var chatMovie:* = event.target.content;

и
Код AS3:

var lib :Object = swf_loader.content;

Даю подсказку: content Вы берете у чего?

UPD. Я ошибся. Эти ссылки указывают на один и тот же объект.
Тогда все должно работать, при условии наличия playerList в document class'е подгружаемой swf.

Adomax 01.07.2009 14:39

mre, допустим написал интерфейс в базовом классе iChat, перечислил в нем все public методы класса chat.
как мне потом сказать flash-у, что загруженный мувик использует интерфейс iChat.
И нужно ли написать в классе chat : implements iChat? и если нужно, где тогда хранить интерфейс?
или вообще нужно создать отдельный as3 файл с классом chat и интерфейсом iChat?

dimarik, я пробовал вот так:

Код AS3:

var chatMovie:* = chatLoader.content;
this.addChild(chatMovie);
chatMovie.playerList(arr);

не работает, а вот это:
Код AS3:

var chatMovie:Object = chatLoader.content;
this.addChild(chatMovie);
chatMovie.playerList(arr);

выдает ошибку:
1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:DisplayObject.

dimarik 01.07.2009 14:48

Код AS3:

chatMovie['playerList'](arr);


Adomax 01.07.2009 15:08

dimarik,
Код AS3:

chatMovie['playerList'](arr);

так же выдает 1006 ошибку

Код AS3:

var arr:Array = ["1","2"];
            var chatMovie:Object = chatLoader.content;
            chatMovie.playerList(arr);

тоже ничего не дало.

Snut, можно подробней про типизацию..... верней что я забыл?

dimarik 01.07.2009 15:20

Цитата:

Сообщение от Adomax (Сообщение 832353)
dimarik,
так же выдает 1006 ошибку

Значит, у content нет такого метода.


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

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