Форум Flasher.ru

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

Dr_Bra 23.01.2011 14:45

событие contentLoaderInfo для каждого объекта, созданного массивом
 
Всем доброго времени суток!

Делаю очередную галерею, на этот раз хочется реализовать такую механику:
1) Подгружаем XML с информацией о картинках
2) С помощью массива создаем контейнеры
3) Загружаем в каждый контейнер картинку
4) Вешаем событие на загрузку, по завершению которого, нужно спрятать прелоадер в контейнере

Последний пункт, как раз и не получается, а именно не получается обратиться к контейнеру, чья картинка уже загрузилась.

Вот часть кода:
Код AS3:

private function loadPicture():void
                {
                        var arreyGallery1:Array = new Array;
                        for(var i:int = 0; i < imgMax; i ++)
                        {
                                var loader:Loader = new Loader;
                                loader.load(new URLRequest(gallery1Content[i].@small));
                                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
                                cont = new Cont();
                                stage.addChild(cont);
                                cont.name = "cont" + [i];
                                cont.x = i * (cont.width + 50);
 
                                cont.container_mc.addChild(loader);
                                cont.info_txt.text = gallery1Content[i].@info;
                        }
 
                }
 
                private function loaderComplete(e:Event):void
                {
                        trace(e.target);//[object LoaderInfo]
                        cont.play();               
                }

Помогите, пожплуста, разобраться, как после того, как картинка уже загрузилась, обратиться к этому контейнеру.

alatar 23.01.2011 14:58

Сделайте в Cont метод addLoader(loader:Loader), в этом методе добавляйте слушателей к лоадеру и добавляйте в список отображения контейнера. В слушателе COMPLETE (внутри контейнера) убирайте прелоадер.

nOobCrafter 23.01.2011 16:09

Dr_Bra а не проще ли написать отдельный класс который бы грузил ваши фотки и отображал этот процесс, а потом и фотку? было бы гораздо проще.

Dr_Bra 24.01.2011 12:20

Вложений: 1
Цитата:

Сообщение от nOobCrafter (Сообщение 967088)
Dr_Bra а не проще ли написать отдельный класс который бы грузил ваши фотки и отображал этот процесс, а потом и фотку? было бы гораздо проще.

Согласен, пробую реализовать:
сделал отдельный класс Container, в нем завел пару публичных переменных, в которые буду помещать информацию. Вот так выглядит наш Container
Код AS3:

package scripts
{
        import flash.display.Loader;
        import flash.display.MovieClip;
        import flash.events.Event;
 
        public class Container extends MovieClip
        {
                private var picLoader:Loader;
                public var firstPicture:String;
                public var info:String;
 
                public function Container()
                {
                        this.addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event):void
                {
                        this.removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        trace(firstPicture + " this is firstPicture");
                        trace(info + " this is info");
                        container_mc.addChild(firstPicture);//возникает ошибка
                }
        }
}

из основного класса теперь передаем информацию, какую картинку загружать, следующим образом ( по другому я не научился, если подскажите правильный вариант передачи информации, будет хорошо):
Код AS3:

 
private function loadPicture():void
                {
                        var arreyGallery1:Array = new Array;
                        for(var i:int = 0; i < imgMax; i ++)
                        {
                                cont = new Cont();
                                cont.firstPicture = gallery1Content[i].@small;
                                cont.info = gallery1Content[i].@info;
                                cont.x = i * (cont.width + 50);
                                stage.addChild(cont);
                        }
 
                }


ошибка:

alatar 24.01.2011 12:26

Цитата:

Код AS3:

cont.firstPicture = gallery1Content[i].@small;
...
container_mc.addChild(firstPicture);


А как вы собирались добавить строку в список отображения?
Цитата:

сделал отдельный класс Container
Он у вас уже был – Cont

Dr_Bra 24.01.2011 12:30

в классе Container собрался добавить ее так:
Код AS3:

container_mc.addChild(firstPicture);//возникает ошибка

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

alatar 24.01.2011 12:33

Супер :)
И какую реакцию от плеера вы ожидали?

Dr_Bra 24.01.2011 12:38

прикалываетесь :)
помогите лучше добиться правильных результатов,
ссылку мы передаем, трэйс показывает все правильно, но загружать не получается ..

alatar 24.01.2011 12:54

Цитата:

ссылку мы передаем, трэйс показывает все правильно, но загружать не получается ..
Ну так сделайте следующий шаг и скормите, наконец, эту ссылку загрузчику.
Код AS3:

package scripts
{
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class Container extends Sprite
        {
                private var picLoader:Loader;
 
                public function Container()
                {
                }
 
                public function loadImage(url:String):void
                {
                        if (picLoader && container_mc.contains(picLoader)
                        {
                                container_mc.removeChild(picLoader);
                        }
                        //тут врубаешь прелоадер
 
                        picLoader = new Loader();
                        var request:URLRequest = new URLRequest(url);
                        picLoader.load(request);
                        picLoader.addEventListener(Event.COMPLETE, picLoader_completeHandler);
                }
 
                private function picLoader_completeHandler(event:Event):void
                {
                        //тут вырубаешь прелоадер
                        //и добавляешь лоадер
                        picLoader.removeEventListener(Event.COMPLETE, picLoader_completeHandler);
                        container_mc.addChild(picLoader);
                }
        }
}


Dr_Bra 24.01.2011 13:34

и когда в главном классе создаем контейнер и вызываем метод контейнера loadImage, мы передаем ссылку вот так?
Код AS3:

cont = new Cont(); 
cont.loadImage(gallery1Content[i].@small);

ошибок никаких не появляется, но и изображения то же не появляются


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

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