Форум 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=151161)

Vilya21 23.02.2011 16:31

Загрузка swf в свою swf.
 
Здравствуйте.
Пытаюсь загрузить swf с помощью класса Loader, как это написано в справке адоби:
http://help.adobe.com/en_US/FlashPla...ay/Loader.html

вот мой код:

Код AS3:

/**
        * ...
        * @author Vilya
        */

        public class Main extends Sprite
        {
                var ldr:Loader = new Loader();
 
                public function Main():void {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
 
                        var req:URLRequest = new URLRequest('castle.swf');
                        ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onSwf_load );
                        ldr.load(req);
                        addChild(ldr);
                }
 
 
                private function onSwf_load(e:Event):void {
                        ldr.contentLoaderInfo.removeEventListener(Event.COMPLETE, onSwf_load );
                        trace('loaded');
                }
        }


Проблема в том что функция onSwf_load() почему-то зацикливается и постоянно вываливается трэйс "loaded" и загруженная swf-ка не добавляется на сцену =(. В чём проблема?

При чём если убрать addChild(ldr) - то загрузка происходит только 1 раз. Всё это работает только с swf-ками, собранными из Flash IDE, в которых нет кода. Если же swf-ка с кодом, то FD показывает окошко "Internal debuger exception", но ни номера, ни причины ошибки не пишет.... =(

f.g.programmer 23.02.2011 17:26

Если заголовок отражает суть, т.е. свфка грузит саму себя, то ничего странного нет. Просто её код выполняется снова и снова. Если же убрать addChild(ldr);, то выполнение кода загруженной свфки прекратится при условии if (stage) init();

Vilya21 23.02.2011 18:04

Нет, нет - грузится другая swf-ка.

goodguy 23.02.2011 19:12

Ну а перенос addChild(ldr) в функцию onSwf_load() ситуацию не исправляет?

Vilya21 23.02.2011 19:27

Не, абсолютно то же самое.

Добавлено через 7 минут
Попробовал добавить в TextField htmlText "yo <img src = 'castle.swf' id = 'castleName'>".

Так вот если в swf чисто графика - то она добавляется прекрасно, а если вместе с кодом - то либо добавление swf-ки опять зацикливается, либо вылазит "Internal debuger exception".

Добавлено через 1 час 27 минут
Долго крутил, мутил - вот что получается:

Код AS3:

public function Main():void {
                        trace('main');
                        if (stage)  init()
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void {
                        trace('init()');
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
 
                        var req:URLRequest = new URLRequest('castle.swf');
                        ldr.load(req);
                        addChild(ldr);
                }

Так вот swf-ки без кода загружаются отлично, а swf-ки, которые начинаются также как эта - зацикливаются. Видимо я что-то не понимаю в обьекте stage и в порядке его загрузки. Ведь получается что как только загружается castle.swf - снова вызывается ф-ия Main(), затем init(), опять происходит загрузка castle.swf и всё по-новой....

Почему так происходит? Что я не понимаю?


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

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