Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Loader.content (http://www.flasher.ru/forum/showthread.php?t=110154)

Ноябрь 28.03.2008 03:37

Loader.content
 
Я хочу написать класс хитрого прелодера,
load_to_clip - просто клип
general_loader - loader
Код:

load_to_clip.addChild(general_loader);//это естественно работает
load_to_clip = general_loader.content as MovieClip;//нет, и не выводит ошибок
load_to_clip.addChild(general_loader.content as MovieClip);//нет, выдает предупреждение*

Как вытащить мувик из подгружаемого swf файла?

*Предупреждение:
Код:

TypeError: Error #2007: Parameter child must be non-null.
        at flash.display::DisplayObjectContainer/addChild()
        at main.loader::LoaderWithClip/load_go()
        at main::Index()


Mr. Fixit 28.03.2008 04:59

Код:

var loadedMovie : LoaderInfo = LoaderInfo(event.target).content;
вроде так, если не ошибаюсь...

etc 28.03.2008 10:43

Цитата:

Сообщение от Mr. Fixit
Код:

var loadedMovie : LoaderInfo = LoaderInfo(event.target).content;
вроде так, если не ошибаюсь...

content уж точно не LoaderInfo. content может быть как Sprite, так и MovieClip, зависит от флешки.

Ноябрь 28.03.2008 17:26

спасибо, вроде получается
Код:

private function onload(e:Event){
        load_to_clip.addChild(e.target.content as MovieClip);
        load_to_clip.parent.f(load_to_clip);
}

//-------Базовый класс
public var a:MovieClip;

public function f(mc):void{
        mc.getChildAt(0).t.stop();
        //a.getChildAt(0).t.stop();//не срабатывает.
}

load_to_clip - это ссылка на клип а, переданная в класс. При успешной загрузке из базового класса вызывается функция f(). mc и a это один и тот же объект, почему же код не срабатывает?

etc 28.03.2008 17:27

«a.getChildAt(0).t» — что это?

Ноябрь 28.03.2008 18:32

t это instance name клипа, который находится в подгружаемом swf файле

etc 28.03.2008 18:58

Это за вас компилятор CS3 клепает подобные ссылки. В AS3 избегайте подобных обращений и используйте getChildByName. Иначе потом будет очень грустно.

А код вообще надо переписать начисто, на основе примеров в хелпе по Loader.

Ноябрь 28.03.2008 19:40

Цитата:

используйте getChildByName
Хорошо..,
Код:

a.getChildAt(0).getChildByName("t").stop();
но так тоже не работает.
Цитата:

на основе примеров в хелпе по Loader
мой код очень похож на пример из хелпа по классу Loader..

Document class:
Код:

package main {
        import flash.display.Sprite;
        import main.loader.LoaderWithClip;
        import flash.display.MovieClip;
       
        public class Index extends Sprite{
                public var a:MovieClip;
               
                public function Index(){
                        a = new MovieClip();
                        addChild(a);

                        var prl = new LoaderWithClip();
                        prl.load_to(a);
                        prl.from('main/loader/testload.swf');
                        prl.load_go();
                }
               
                public function f(mc):void{
                        //mc.getChildAt(0).getChildByName("t").stop();//остановка срабатывает
                        //a.getChildAt(0).getChildByName("t").stop();//не срабатывает
                        trace(mc==a);//true
                        trace(mc===a);//true
                }
        }
}

класс LoaderWithClip
Код:

package main.loader {
        import flash.display.Loader;
        import flash.display.LoaderInfo;
        import flash.net.URLRequest;
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
       
        public class LoaderWithClip extends MovieClip{
               
                public var load_to_clip:*;
                public var url:URLRequest;
                public var general_loader:Loader;
               
                public function LoaderWithClip(){
                        general_loader = new Loader();

                }
               
                public function load_to(mc:*):void{
                        load_to_clip = mc;
                }
               
                public function from(url_str:String):void{
                        url = new URLRequest(url_str);
                }
               
                public function load_go():void{
                        general_loader.load(url);
                        general_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onload);
                }
               
                private function onload(e:Event){
                        load_to_clip.addChild(e.target.content as MovieClip);
                        load_to_clip.parent.f(load_to_clip);
                }
               
        }
       
}



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

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