Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9

Последовательная загрузка графики

15.02.2013, 19:54. Показов 1309. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться с ошибкой

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at ImageLoader/::loadImage()
at flash.utils::Timer/flash.utils:Timer::_timerDispatch()
at flash.utils::Timer/flash.utils:Timer::tick()
ImageLoader.as
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package {
    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.utils.*;
    import flash.text.*;
 
    public class ImageLoader extends Sprite {
        private var slideItems:Items;
        private var thisItem:Item;
 
        private var i:int=0;
        private var timer:Timer;
        private var imgLoader:Loader;
        private var textName:TextField;
 
        public function ImageLoader() {
            timer=new Timer(3000);
            timer.addEventListener(TimerEvent.TIMER,loadImage);
            timer.start();
 
        }
        private function loadImage(e:TimerEvent):void {
            trace("a");
 
            var item_s:Array=slideItems.getItems();
            thisItem=item_s[i];
 
            if (i == item_s.length) {
                i=0;
            }
            
            if (imgLoader != null) {
                removeChild(imgLoader);
                imgLoader=null;
            }
            imgLoader=new Loader();
            addChild(imgLoader);
            imgLoader.load(new URLRequest(thisItem.src));
 
            if (textName != null) {
                removeChild(textName);
                textName=null;
            }
            textName=new TextField();
            textName.autoSize = TextFieldAutoSize.LEFT;
            textName.y=150;
            textName.selectable = false;
            addChild(textName);
            textName.text=thisItem.nam;
 
            i++;
        }
    }
}


Items.as
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package {
    public class Items {
        public var img1:Item=new Item("image1","1.jpeg");
        public var img2:Item=new Item("image2","2.jpeg");
        public var img3:Item=new Item("image3","3.jpeg");
        public var img4:Item=new Item("image4","4.jpeg");
 
        public var allImg:Array=[img1,img2,img3,img4];
 
        public function getItems():Array {
            return allImg.slice(0);
        }
    }
}


Item.as
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
package {
    public class Item {
        public var nam:String;
        public var src:String;
        public function Item(nam:String,src:String) {
            this.nam=nam;
            this.src=src;
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2013, 19:54
Ответы с готовыми решениями:

Последовательная загрузка файлов
Очередной вечер копания в JS. Пытаюсь переписывать скрипты с Jquery на js и наоборот что бы набраться опыта. Столкнулся с проблемой. ...

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

DownloadFileAsync последовательная загрузка
Привет всем, у меня есть вот такой код: for (int i = 0; i < allTicks; i++) { ...

17
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
15.02.2013, 21:20
А где у вас создается объект slideItems? И вообще, почему загрузка идет по таймеру?
0
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9
16.02.2013, 00:15  [ТС]
Благодарю. Создал slideItems. Заработало.
А почему таймер? Просто что пришло в голову. Это мой первый опыт. Подскажите как правильно организовать.)
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
16.02.2013, 00:23
Теоретически можно сразу начинать вызов. Если планируется обращение к stage (не this), то необходимо дождаться события ADDED_TO_STAGE. А следующее изображение грузить после загрузки предыдущего.
0
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9
24.02.2013, 23:39  [ТС]
Почему delay=null?

SlideShow.as
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package {
    import flash.display.*;
    import flash.utils.*;
 
    public class SlideShow extends Sprite {
        private var loadInterval:int;
        private var showItems:XMLLoader;
        private var options:XMLLoader;
        private var imgLoader:ImageLoader;
        private var i:int=0;
        
        public function SlideShow() {
            showItems=new XMLLoader();
            options=new XMLLoader();
 
            loadInterval = setInterval(newSlide,3000);
            getDelay();
        }
        public function newSlide():void {
            var shItems:XML=showItems.getImages();
 
            if (imgLoader!=null) {
                removeChild(imgLoader);
                imgLoader=null;
            }
            imgLoader=new ImageLoader(this,shItems,i);
            addChild(imgLoader);
 
            i++;
            if (i==shItems.*.length()) {
                i=0;
            }
        }
        public function getDelay():void {
            var delay:XML=options.getOptions();
            trace(delay);
            //return delay;
        }
    }
}

ImageLoader.as
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package {
    import flash.display.*;
    import flash.events.*;
    import flash.net.URLRequest;
    import flash.text.*;
 
    public class ImageLoader extends Sprite{
        private var textName:TextField;
        private var shoW:SlideShow;
        private var imgItems:XML;
        private var j:int;
        
        public function ImageLoader(shoW:SlideShow,imgItems:XML,j:int) {
            this.shoW=shoW;
            this.imgItems=imgItems;
            this.j=j;
            loadImage();
        }
        public function loadImage():void {
            //trace("Now loading image...");
            
            var img:Loader =new Loader();
            addChild(img);
            img.load(new URLRequest(imgItems.*[j].@SRC));
            
            textName=new TextField();
            textName.y=150;
            textName.textColor=0x0000FF;
            textName.border=true;
            textName.width=200;
            //textName.height=20;
            textName.autoSize=TextFieldAutoSize.CENTER;
            addChild(textName);
            textName.text=imgItems.*[j].@NAME;
        }
    }
}

XMLLoader.as
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package {
    import flash.events.*;
    import flash.net.*;
 
    public class XMLLoader {
        private var imageS:XML;
        private var optionS:XML;
        private var urlLoader:URLLoader;
        private var urlLoader2:URLLoader;
 
        public function XMLLoader() {
            var urlRequest:URLRequest=new URLRequest("images.xml");
            urlLoader=new URLLoader();
            urlLoader.addEventListener(Event.COMPLETE, completeListener);
            urlLoader.load(urlRequest);
            
            var urlRequest2:URLRequest=new URLRequest("options.xml");
            urlLoader2=new URLLoader();
            urlLoader2.addEventListener(Event.COMPLETE, completeListener2);
            urlLoader2.load(urlRequest2);
        }
        private function completeListener(e:Event):void {
            imageS=new XML(urlLoader.data);
        }
        private function completeListener2(e:Event):void {
            optionS=new XML(urlLoader2.data);
        }
        public function getImages():XML {
            return imageS;
        }
        public function getOptions():XML {
            return optionS;
        }
    }
}

options.xml
Кликните здесь для просмотра всего текста
<OPTIONS>
<DELAY>3000</DELAY>
</OPTIONS>
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
25.02.2013, 00:39
Потому что на момент попытки получить свойство контент еще не загружен, т.е. вы берете в магазине хлеб, который еще не привезли, а надо бы подождать окончание поставки продукта.
0
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9
25.02.2013, 12:58  [ТС]
А почему с shItems такой проблемы нет? Не понимаю.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
25.02.2013, 15:34
Цитата Сообщение от Shish Посмотреть сообщение
А почему с shItems такой проблемы нет?
Наверное успевает загрузиться. В любом случае не стоит рассчитывать "на авось", отслеживайте окончание загрузки.
0
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9
25.02.2013, 19:48  [ТС]
А подскажите как? А то я что-то в затруднении.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
25.02.2013, 20:56
Используйте классы URLLoader и Loader
По ссылкам есть примеры.
0
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9
25.02.2013, 23:30  [ТС]
Я использую класс URLLoader в файле XMLLoader.as. И отслеживаю событие COMPLETE.
В файле SlideShow.as создаю экземпляр
ActionScript 3
1
options=new XMLLoader();
. Затем пытаюсь вызвать метод
ActionScript 3
1
var delay:XML=options.getOptions();
. А в ответ получаю null. И не понимаю почему?
Я так понимаю, что options еще не готов. Но как отследить его готовность?
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
25.02.2013, 23:53
Отправить событие (dispatchEvent) об окончании загрузки. В примере ведь попытка получения данных происходит сама по себе, а загрузка сама по себе. Событие отрабатывается, но толку от этого 0, т.к. данные грузятся когда им хочется, а не тогда, когда необходимо.
0
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9
27.02.2013, 23:05  [ТС]
Как отследить событие COMPLETE объекта XMLLoader пока не знаю, так что поставил костыль в виде таймера
CompleteDetector.as
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package {
    import flash.events.*;
    import flash.utils.*;
 
    public class CompleteDetector extends EventDispatcher {
        public static  const COMPLETED:String="COMPLETED";
        private var watchedObj:XMLLoader;
 
        public function CompleteDetector(obj:XMLLoader) {
            watchedObj=obj;
            var timer:Timer=new Timer(50,1);
            timer.addEventListener(TimerEvent.TIMER,timerListener);
            timer.start();
            function timerListener(e:TimerEvent):void{
                allRight();
                }
        }
        public function allRight():void {
            dispatchEvent(new Event(CompleteDetector.COMPLETED));
        }
    }
}

В принципе заработало.
Благодарю.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
27.02.2013, 23:24
Цитата Сообщение от Shish Посмотреть сообщение
Как отследить событие COMPLETE объекта XMLLoader пока не знаю
Ссылку же давал с примерами
Вот описание метода load с примером (обработчик окончания загрузки в примере метод loaderCompleteHandler).

Не по теме:

И не стоит использовать анонимные и вложенные функции.

0
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9
28.02.2013, 18:41  [ТС]
Эти примеры понятны. Как прослушать COMPLETE понятно. Только в моем случае надо отправить весть в другую точку об уже произошедшем COMPLETE.
Вот написал следующее:
CompleteDetector.as
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
package {
    import flash.events.*;
 
    public class CompleteDetector extends EventDispatcher {
        public static  const COMPLETED_IMGS:String="COMPLETED_IMGS";
        public static  const COMPLETED_OPTS:String="COMPLETED_OPTS";
 
        public function CompleteDetector() {
        }
    }
}

XMLLoader.as
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package {
    import flash.events.*;
    import flash.net.*;
 
    public class XMLLoader {
        private var imageS:XML;
        private var optionS:XML;
        private var urlLoader:URLLoader;
        private var urlLoader2:URLLoader;
 
        public function XMLLoader() {
            var urlRequest:URLRequest=new URLRequest("images.xml");
            urlLoader=new URLLoader  ;
            urlLoader.addEventListener(Event.COMPLETE,completeListener);
            urlLoader.load(urlRequest);
 
            var urlRequest2:URLRequest=new URLRequest("options.xml");
            urlLoader2=new URLLoader  ;
            urlLoader2.addEventListener(Event.COMPLETE,completeListener2);
            urlLoader2.load(urlRequest2);
        }
        private function completeListener(e:Event):void {
            imageS=new XML(urlLoader.data);
            dispatchEvent(new Event(CompleteDetector.COMPLETED_IMGS));
        }
        private function completeListener2(e:Event):void {
            optionS=new XML(urlLoader2.data);
            dispatchEvent(new Event(CompleteDetector.COMPLETED_OPTS));
        }
        public function getImages():XML {
            return imageS;
        }
        public function getOptions():XML {
            return optionS;
        }
    }
}

Только вот такая проблема:
1180: Call to a possibly undefined method dispatchEvent.

А если класс XMLLoader расширяет Sprite, то такой проблемы нет.
Не понимаю связи.
0
 Аватар для Theoryofgames
254 / 238 / 50
Регистрация: 20.12.2011
Сообщений: 707
28.02.2013, 19:20
Цитата Сообщение от Shish Посмотреть сообщение
Только вот такая проблема:
1180: Call to a possibly undefined method dispatchEvent.
Для того, чтобы вызывать метод dispatchEvent класс должен наследовать от EventDispatcher

ActionScript 3
1
public class XMLLoader extends EventDispatcher
Плюс ко всему - события то вызываете, но где у вас обработчики для данных событий?
0
0 / 0 / 0
Регистрация: 15.02.2013
Сообщений: 9
01.03.2013, 21:56  [ТС]
А почему не получается сделать вот так?
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package {
    import flash.events.EventDispatcher;
    import flash.events.Event;
 
    public class CompleteDetector extends EventDispatcher{
        public static  const COMPLETED_OPTS:String="COMPLETED_OPTS";
 
        public function CompleteDetector() {
        }
        public function allRight():void{
            dispatchEvent(new Event(CompleteDetector.COMPLETED_OPTS));
        }
    }
}

Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package {
    import flash.events.*;
    import flash.net.*;
 
    public class XMLLoader {
        private var imageS:XML;
        private var optionS:XML;
        private var urlLoader:URLLoader;
        private var urlLoader2:URLLoader;
 
        public function XMLLoader() {
            var urlRequest:URLRequest=new URLRequest("images.xml");
            urlLoader=new URLLoader  ;
            urlLoader.addEventListener(Event.COMPLETE,completeListener);
            urlLoader.load(urlRequest);
 
            var urlRequest2:URLRequest=new URLRequest("options.xml");
            urlLoader2=new URLLoader  ;
            urlLoader2.addEventListener(Event.COMPLETE,completeListener2);
            urlLoader2.load(urlRequest2);
        }
        private function completeListener(e:Event):void {
            imageS=new XML(urlLoader.data);
        }
        private function completeListener2(e:Event):void {
            optionS=new XML(urlLoader2.data);
            var cd:CompleteDetector=new CompleteDetector();
            cd.allRight();
        }
        public function getImages():XML {
            return imageS;
        }
        public function getOptions():XML {
            return optionS;
        }
    }
}

Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
    import flash.display.*;
    import flash.events.*;
 
    public class Test extends Sprite {
        private var test:XMLLoader;
        public function Test() {
            test=new XMLLoader();
            test.addEventListener(CompleteDetector.COMPLETED_OPTS,completedListener);
        }
        private function completedListener(e:Event):void {
            trace(test.getImages());
            trace(test.getOptions());
        }

1061: Call to a possibly undefined method addEventListener through a reference with static type XMLLoader.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
01.03.2013, 21:59
Shish, вам уже Theoryofgames написал причину. У вашего класса нет метода addEventListener, который есть у наследников EventDispatcher
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2013, 21:59
Помогаю со студенческими работами здесь

Последовательная асинхронная загрузка файлов
Здравствуйте. Пытаюсь сделать чтобы программа скачала 2 файла. Один из интернета, другой из локальной сети и показала скорость...

Последовательная загрузка файлов по протоколу bittorrent (C/C++)
Работа удаленная. Свободный график работы. Стоимость: 1500-3000$. Контакты для связи: email: stanislav.grechka@gmail.com skype:...

Последовательная загрузка файлов с FTP с двумя ProgressBar
Требуется реализация простейшего алгоритма: 1. При нажатии кнопки Button1 выполняем проверку доступности FTP-сервера. 2. Если сервер...

Последовательная загрузка URL в webbrowser через 10 секунд из массива по таймеру
Что у меня неправильно? у меня в данный момент загружается всегда последний элемент массива using System; using...

Загрузка растровой графики
Здравствуйте! Начал разбираться с растровой графикой и с самого начала не могу понять, почему мое изображение не выводится в окне....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru