Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   После загрузки стороннего ролики, отображается копия основного (http://www.flasher.ru/forum/showthread.php?t=202364)

elder_Nosferatu 12.07.2013 08:31

После загрузки стороннего ролики, отображается копия основного
 
Вложений: 2
Салют!

Выручайте народ, ато я уже на плеер ругаться начинаю...
Суть такова: нужно загрузить внешний ресурс (либо битмапу, либо другой ролик). Использую Loader. Если гружу картинку, тогда все ок. Если же ролик (неважно какой), тогда чтото грузится, а потом отобразается мой же глваный ролик внутри себя (он же в свою очередь тоже начинает процесс загрузки).

Проверял что же грузится, используя URLLoader + Loader.loadBytes(). Судя по bytesTotal подгружается нужный мне ролик, но отображается все равно загрузчик. Тот же результат, если внедрять нужный ролик в загрузчик...

Чтобы показать суть происходящего более наглядно, я сделал тестовое предложение. Оно рисует себе полупрозрачный фон и начинает загрузку внешнего ролика. Лоадер сжимается до 90% чтобы было заметно, как выстраиваются ролики. Также делаю трейс всех родительских контейнеров лоадера, вплоть до сцены.

Прошу проверить мой ролик и отписаться о результатах. Может даже кто нибуть с таким сталкивался и знает в чем дело и что с этим делом делать...

Код AS3:

package {
        import flash.display.DisplayObjectContainer;
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.net.URLRequest;
 
        /**
        * ...
        * @author elder_Nosferatu
        */

        public class Main extends Sprite {
                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
                        graphics.beginFill(0, 0.1);
                        graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
                        graphics.endFill();
 
                        var ldr:Loader = new Loader();
                        ldr.scaleX = ldr.scaleY = 0.9;
                        addChild(ldr);
                        ldr.load(new URLRequest("data.dat"));
                        trace("trace");
 
                        var parents:Array = [];
                        var cont:DisplayObjectContainer = ldr;
                        while (cont) {
                                parents.push(cont.parent);
                                cont = cont.parent;
                        }
                        trace(parents.join("->"));
                }
 
        }
 
}

Вложение 29807

Код:

trace
[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
trace
[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Loader]->[object Main]->[object Stage]->
...


silin 12.07.2013 09:16

в загружаемом swf рутовый класс тоже Main ?

elder_Nosferatu 12.07.2013 09:30

Скорее всего...
Но это не первый мой прелоадер, а главный класс у меня всегда Main.

Добавлено через 8 минут
Черт возьми! Вы были правы :). У меня небыло никогда таких проблемм из за того, что все прелоадеры, которые я до этого делал делались во Флеше. А там у меня класс документа всегда совпадает с названием фла-файла (Index.swf).

Жаль что карму убрали. Вот такие замечания стоят больше чем развернутый ответ на тривиальный вопрос.
Большое спасибо!!!

Tails 12.07.2013 10:28

Для этих случаев есть такая фишка - ApplicationDomain.

Цитата:

Класс ApplicationDomain является контейнером для дискретных групп определений классов. Домены приложения используются для разделения классов в одном домене безопасности. Они обеспечивают возможность наличия нескольких определений одного класса и позволяют нижестоящим элементам многократно использовать определения вышестоящих элементов.

elder_Nosferatu 13.07.2013 03:10

Беда в том, что пример сильно упрощен. На самом деле два ролика должны сидеть в одном ApplicationDomain. Я как бы и знал всю эту тему с перекрытием определений классов в одном домене, но... Знание еще не означает профессионализм.

iNils 13.07.2013 13:31

А всего-то нужно было использовать пакет.

elder_Nosferatu 13.07.2013 16:43

Случайно увидел, что название моего топика было изменено :) Я конечно не против, но...
Мое название было совсем не информативным. А новое стало дезинформирующим!
Судя по новому названию: Лоадер грузит ролик, а потом опять его грузит (судя по моему скриншоту - грузит безконечно).
Я же описывал ситуацию, когда после загрузки заказаного ролика Лоадер отображает не загруженый(!), а ВЫЗЫВАЮЩИЙ РОЛИК. Тоесть в Лоадере оказывается клон root-ового ролика, который повторяет ту же задачу. Такая себе рекурсия.
Ну а причина такого поведения была полностью раскрыта товарищами silin и Tails. Товарищ же iNils предложыл очень грамотное решение проблемы.

Tails 13.07.2013 16:59

Создать свою зону юрисдикций для подгружаемых роликов будет не менее грамотно. Я про ApplicationDomain.

elder_Nosferatu 13.07.2013 18:49

Я имел ввиду, что для моего реального случая очень подходит вариант тов. iNils`а. В примере этого не видно, так как я оставил только суть проблемы.


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

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