Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   SCOPE и загрузка ролика swf (http://www.flasher.ru/forum/showthread.php?t=100434)

antonimo 27.08.2007 19:27

SCOPE и загрузка ролика swf
 
Всем привет! :)
Столкнулся с такой проблемой: загружаю с помощью Loader ролик swf.
он начинает проигрываться, нормально, но проблема в том, что он не видит переменных и SCOPE PARENT ролика в который я его добавил.
Как быть может есть другие способы загрузки ролика? в AS2 это можно было сделать .

etc 27.08.2007 19:44

А подгружаемый ролик какой версии?

antonimo 28.08.2007 17:34

Ролик версии 9.0, Flash CS3

Dendroid 28.08.2007 18:03

1. Возможно переменные protected.
2. Возможно надо дождаться события INIT (parent доступен только после этого события, а не сразу после загрузки).
3. Может быть parent - это не тот объект, что Вы думаете (этот parent: loaderInfo.loader.parent?)
4. Возможно это cross domain проблемы.

Другого способа загрузки нет, надо искать в этом...

antonimo 29.08.2007 07:37

событие инит, это идея. Посмотрю... пасиб

antonimo 29.08.2007 11:33

узнал что root в загружаемом ролике это его собственный root, а вот stage вроде один у всего проекта.
Удалось передать загружаемому ролику переменную MovieClip, например mc, которая является parent загружаемого ролика, тобишь внего вставляется.

допустим у этого parent было объявлена переменная var1.
Внутри загружаемого ролика после события ADDED_TO_STAGE обращаюсь к mc.var1 и flash меня посылает, не работает. Что делать, хз :(((((

Может попробовать описать класс, с теми данными, которые мне нужны, туда их забить, загрузить ролик и передать ему экземпляр этого класса.
А в загружаемом ролике сделать import описания этого класса, чтоб сука флэш знал что к чему, и захавать этот экземпляр, который передаст перент. Как думаете? бред.... или нет?

Можно ли к объектам сцены обращаться не через точку, а как нить по другому? как нить ["object_name"] или еще как?

etc 29.08.2007 13:28

antonimo, ещё раз я увижу более двух постов подряд — буду ставить плюсы.
Посты нужно редактировать, если надо что-то добавить.

silin 29.08.2007 15:29

Цитата:

Сообщение от antonimo
допустим у этого parent было объявлена переменная var1.
Внутри загружаемого ролика после события ADDED_TO_STAGE обращаюсь к mc.var1 и flash меня посылает, не работает. Что делать, хз :(((((

Может попробовать описать класс..

имхо так и надо, все логично тогда..
main.swf(Main.as) грузит child.swf (Child.as)
"init" MovieClip что-то не генерит (и не должен по документации), "added" тоже не при делах оказалось..
повесил на "enterFarme"
Код:

package {
        import flash.display.Loader;
        import flash.display.MovieClip;
        import flash.net.URLRequest;

        public class Main extends MovieClip{
                public var var1:String="var 1";
                public function Main(){
                        var loader:Loader=new Loader();
                        loader.load(new URLRequest("child.swf"));
                        addChild(loader);
                }
        }
}

Код:

package {
        import flash.display.MovieClip;
        import flash.events.*;
        public class Child extends MovieClip{
                public function Child(){
                        addEventListener(Event.ENTER_FRAME,enterFrame);
                }
                private function enterFrame(evnt:Event){
                        trace(parent);//[object Loader]
                        var main:Main=parent.parent as Main;
                        trace(main);//[object Main]
                        if(main){
                                trace(main.var1);//var 1
                        }
                        removeEventListener(Event.ENTER_FRAME,enterFrame);
                }
        }
       
}


Dendroid 29.08.2007 16:16

У меня примерно так работало:
Код:

loaderInfo.addEventListener(Event.INIT, initHandler);
function initHandler (event:Event) {
        if (loaderInfo.loader!=null) { // проверяем, что мувик загружен, а не запущен сам по себе
                var var1 = loaderInfo.loader.parent.var1;
       
        }
}

Можно и так обращаться:
Код:

loaderInfo.loader.parent["var"+1]
и так проверять, чтобы быть уверенным:
Код:

loaderInfo.loader.parent.hasOwnProperty("var1")

etc 29.08.2007 16:29

А я бы интерфейс бы прикрутил ко всему этому…

silin 29.08.2007 16:44

все верно, если смотреть из подгружающего, loaderInfo его ("init") и генерит, но из подгружаемого ты же на него никак не подпишешься.., речь об этом вроде шла..

antonimo 29.08.2007 17:30

Разобрался - если через точку то он посылает, так ошибка, насколько я смыслю в программировании, возникает на стадии компиляции ролика, который нужно подгрузить. Т.к. в нем используются левые свойства, переменные и другая необъявленная байда.
А если к переменным стучаться через ['variable'], то работает. Если такая переменная действительно есть.
Возник вопрос: А как перебрать все переменные доступные в ролике?
чтоб знать какой variable есть а какого нет?

Заинтересовал ответ __etc про интерфейс, интересно, это что такое, во Флеше?

etc 29.08.2007 17:37

Я имел ввиду написать интерфейс, со всеми свойствами, методами и работать через него, без квадратных скобок.

Dendroid 29.08.2007 20:45

Цитата:

Сообщение от silin
все верно, если смотреть из подгружающего, loaderInfo его ("init") и генерит, но из подгружаемого ты же на него никак не подпишешься.., речь об этом вроде шла..

Да, но он и не нужен в основном мувике, он проходит где-то между onProgress 100% и onComplete, т.е. по onComplete уже видно все объекты в первом фрейме и главном классе загруженного клипа.

А интерфейс заимплементить в таких случаях - дело, безусловно, хорошее, позволяет структурировать обращения и компилять без варнингов. ;)
Только, если автор дошёл уже до такой степени отчаяния, что собирается перебирать все переменные в клипе, то интерфейс ему уже не поможет. И, главное, непонятно пока почему... :)

silin 29.08.2007 21:54

все равно не въезжаю о чем ты: если речь о возможности обратится из подгружаемого мувика к методам/свойствам хостера, причем здесь onProgress /onComplete/init и видимость объектов загруженного клипа из загружающего?
как ты предлагаешь определить из загружаемого момент, когда ему уже виден родитель?

Dendroid 30.08.2007 12:14

Насколько мне известно порядок событий такой:
1. PROGRESS 100% в loader основного клипа.
2. INIT в loaderInfo загруженного клипа.
3. COMPLETE в loader основного клипа.

Поэтому я и говорю, что:
a. Доступ к объектам загруженного клипа есть сразу после COMPLETE.
б. Доступ к объектам хостера есть сразу после INIT (кроме случаев, когда требуется доступ к структуре DisplayObjects, а addChild() вызывается в COMPLETE хендлере; поэтому я предпочитаю вызывать addChild() либо сразу в начале загрузки, либо на событие PROGRESS 100%).

antonimo 30.08.2007 12:20

ты такое писал уже? вот например у меня есть myloader который юзает клип из основного swf, если я пытаюсь этот myloader юзать, в плане создать экземпляр, в другом фйлве swf, то флэш меня посылает т.к. этого клипа в нем нет.

Можешь пример такого интерфейса, интересно, но я недогоняю идею универсальности, о которой ты говоришь.

etc 30.08.2007 12:52

antonimo, к кому вопрос-то? Я вижу в топике две проблемы — с обращением объектов друг к другу и использованием интерфейса.

silin 30.08.2007 16:11

Dendroid, порядок событий понятен, как отловить стадии загрузки из загружающего тоже..
интересовало как эти события можно отловить в подгружаемом..и все..


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

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