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

ostashko 28.07.2009 00:28

Подгрузка картинок и их отображение на экране
 
Здравствуйте!
По мере изучения флеш и написания небольших учебных приложений возник вопрос:
Хочу подгрузить несколько внених картинок и отобразить их на экране.
Написал такой код:
Код AS3:

package {
        import flash.display.*;
        import flash.net.*;
        import flash.events.*;
        import flash.system.*;
 
        public class pictures extends Sprite {
                public var loadEvent: Loader = new Loader();
                public var loaders: Array = new Array();
                public var urlRequest: URLRequest;
                public var i = 0;
 
                public function pictures () {                                       
                                urlRequest = new URLRequest;                       
 
                                for (i = 0; i<=1; i++) {
                                        urlRequest.url = i+".jpg";
                                        loaders[i] = new Loader();                                       
                                        loaders[i].contentLoaderInfo.addEventListener(Event.INIT, initListener);                       
                                        loaders[i].load(urlRequest);                               
                                }
 
 
                }
 
                public function initListener (e:Event):void {
                        addChildAt(loaders[i].content, i);
                }
        }
 
}

То есть, к примеру, имеем две картинки 0.jpg и 1.jpg загружаем их и отображаем на экране.
Выдает ошибку: TypeError: Error #1010: Термин не определен и не имеет свойств.
at pictures/initListener()
Заметил, если закомментировать строку с addEventListener то не выдает ошибку но естественно не вызывается функция-обработчик прерывания.

Не очень силен в теории, но так и не нашел комментариев, нужно ли все таки вешать событие обработчик на каждый экземпляр Loader'a или нет. Если нужно вешать только на один то на какой именно.

Вообщем буду благодарен, если знающие люди прояснят ситуацию по этим вопросам.

Dimax4d 28.07.2009 00:40

Так?

Код AS3:

loaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, initListener);


switcher! 28.07.2009 01:32

Цитата:

Сообщение от ostashko (Сообщение 838662)
Код AS3:

                        public function pictures () {                                        
                                urlRequest = new URLRequest;                       
 
                                for (i = 0; i<=1; i++) {
                                        urlRequest.url = i+".jpg";
                                        loaders[i] = new Loader();                                       
                                        loaders[i].contentLoaderInfo.addEventListener(Event.INIT, initListener);                       
                                        loaders[i].load(urlRequest);                               
                                }
 
 
                }
 
                public function initListener (e:Event):void {
                        addChildAt(loaders[i].content, i);
                }


если нужнопросто загрузить и отобразить картинку - чем не устраивает, просто:
Код AS3:

                public function pictures () {                                        
                                urlRequest = new URLRequest;                       
 
                                for (i = 0; i<=1; i++) {
                                        urlRequest.url = i+".jpg";
                                        loaders[i] = new Loader();                                       
 
                                        loaders[i].load(urlRequest);
                                        this.addChildAt(loaders[i], i);
                                }
                        }

?
+ loaders[i] заменить на локальную переменную для улучшения производительности

udaaff 28.07.2009 01:41

Код AS3:

public function initListener (e:Event):void {
    addChildAt(loaders[i].content, i);
    addChild(LoaderInfo(e.target).content);
}


Dimax4d 28.07.2009 01:49

Я так писал:

Код AS3:

addChild(e.target.loader.content)

Думал, что content только у Loader есть, сейчас посмотрел хелпе, был не прав

udaaff 28.07.2009 01:53

Есть и у LoaderInfo.

ps: проверял лично =)

ostashko 28.07.2009 02:19

switcher!, udaaff, Dimax4d
Спасибо, все заработало. А все же для информации: почему не работал мой вариант?

Dimax4d 28.07.2009 02:27

Цитата:

почему не работал мой вариант?
Из справки Adobe:

Цитата:

init событие
Отправляется, когда свойства и методы загруженного SWF-файла становятся доступны и готовы к использованию. Содержимое, однако, может продолжать загружаться. Объект LoaderInfo отправляет событие init, когда выполняются два следующих условия:
Доступны все свойства и методы, связанные с загруженным объектом и с объектом LoaderInfo.
Завершена работа конструкторов для всех дочерних объектов.
Код ActionScript в первом кадре основной временной шкалы загруженного SWF-файла был полностью выполнен.

Например, событие Event.INIT отправляется после загрузки первого кадра ролика или анимации. Тогда ролик становится доступным и может быть добавлен в список отображения. Загрузка ролика полностью, однако, может занять больше времени. Событие Event.COMPLETE отправляется только при полной загрузке ролика.

Событие init всегда предшествует событию complete....
У тебя же не SWF, наверно поэтому и не работает

ostashko 28.07.2009 02:46

Что-то не совсем понимаю, событие то осталось тоже самое, просто по-другому из функции обработчика обращаемся к загруженному содержимому, вместо: addChildAt(loaders[i].content, i); пишем: addChild(LoaderInfo(e.target).content);

switcher! 28.07.2009 02:47

Цитата:

Сообщение от udaaff (Сообщение 838678)
Код AS3:

    addChild(LoaderInfo(e.target).content);
}


а что делает LoaderInfo(e.target)? Т.е. если у класса Loader, существует метод Loader(). То вот у LoaderInfo я такого метода в хелпе не нашел... хотя там же приводится пример использования LoaderInfo()


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

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