Форум Flasher.ru

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

AlexsWulf 24.10.2009 20:59

Error #1010 в Loader
 
Доброго времени суток.
Потребывалось загрузить избражение.
Беру демо код с нелпа по AS3
Получаю класс следующего содержания
Код AS3:

public class userPhoto extends Sprite {
 
                private var _load : Loader;
                var profile_arr : Array = game.data_prov.getUserProfiles();
                var url : String = profile_arr[0].photo;
                public function userPhoto():void
                {
                        _load = new Loader();
                        _load.contentLoaderInfo.addEventListener(Event.COMPLETE, initPhoto);
            _load.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
                        var urlRequest : URLRequest = new URLRequest(url);
                        _load.load(urlRequest);
                }
 
                private function ioErrorHandler(event : IOErrorEvent) : void {
            trace("Unable to load image: " + url);
        }
 
 
                private function initPhoto(e : Event):void
                {
 
                }
        }

в основном приложении вызываю его таким образом
Код AS3:

public function init_listener(e : Event) : void {
                        public static var user_p : userPhoto;
                        user_p = new userPhoto();
                        addChild(user_p);
}

в резултьате имею ошибку следующего содержания
Код:

TypeError: Error #1010: A term is undefined and has no properties.
        at main::userPhoto$iinit()
        at main::game/init_listener()
        at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at MethodInfo-622()

Если закомментировать строки
Код AS3:

_load.contentLoaderInfo.addEventListener(Event.COMPLETE, initPhoto);
_load.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
_load.load(urlRequest);

то ошибка пропадает но как следствие ничего не работает.
Подскажите в чем проблема? Что я опять наворочил ?
Заранее благодарю за ответ. :drinks:

SamFR 24.10.2009 21:08

Скорее всего, у вас не определена переменная profile_arr. Попробуйте инициализировать url в конструкторе, протрейсив перед тем profile_arr.
А вообще, в вашем случае лучше и profile_arr инициализировать в конструкторе.

etc 24.10.2009 21:09

А зачем вы статическую переменную объявляете внутри метода экземпляра?

AlexsWulf 24.10.2009 21:46

Цитата:

Сообщение от SamFR (Сообщение 860365)
Скорее всего, у вас не определена переменная profile_arr. Попробуйте инициализировать url в конструкторе, протрейсив перед тем profile_arr.
А вообще, в вашем случае лучше и profile_arr инициализировать в конструкторе.

Определена. Ну или по крайней мере трейс выдает то что ожидалось.

Добавлено через 2 минуты
Цитата:

Сообщение от etc (Сообщение 860366)
А зачем вы статическую переменную объявляете внутри метода экземпляра?

Это не удачный копи паст.
В реальном коде она определенна вне метода в классе. Так скопировал при попытке сократить код для форума.



PS: Извините за два ответа. Никогда не пользоваться цитатами. у уже при второй обнаружил кнопку "мультицитата".

SamFR 24.10.2009 23:04

Цитата:

Сообщение от AlexsWulf (Сообщение 860387)
Определена. Ну или по крайней мере трейс выдает то что ожидалось.

Тогда протрейсите profile_arr[0]... Ошибка выскакивает на этапе инициализации, там и ищите:
Код AS3:

public class userPhoto extends Sprite {
 
        private var _load : Loader;
        private var profile_arr : Array;
        private var url : String;
 
        public function userPhoto():void{
                profile_arr = game.data_prov.getUserProfiles();
 
                trace('profile_arr: ' + profile_arr);
                trace('profile_arr[0]: ' + profile_arr[0]);
 
                _url = profile_arr[0].photo;
                trace('_url: ' + _url);
 
                _load = new Loader();
                _load.contentLoaderInfo.addEventListener(Event.COMPLETE, initPhoto);
                _load.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
                var urlRequest : URLRequest = new URLRequest(url);
                _load.load(urlRequest);
        }
 
        private function ioErrorHandler(event : IOErrorEvent) : void {
                trace("Unable to load image: " + url);
        }
 
        private function initPhoto(e : Event):void{
 
        }
}


etc 25.10.2009 02:55

Угу, скорее всего наглухо не учтена асинхронная сущность флеша.

AlexsWulf 25.10.2009 15:41

Цитата:

Сообщение от SamFR (Сообщение 860411)
Тогда протрейсите profile_arr[0]...

выполнил
в результате получил
Код:

profile_arr: [object Object]
profile_arr[0]: [object Object]
_url: http://cs1205.vkontakte.ru/u14266980/c_4a75a9bb.jpg
TypeError: Error #1010: A term is undefined and has no properties.
        at main::userPhoto$iinit()

Добавлено через 1 минуту
Цитата:

Сообщение от etc (Сообщение 860510)
Угу, скорее всего наглухо не учтена асинхронная сущность флеша.

Я вроде постарался учесть асинхронность. Но так как только начал заниматься AS3 то все может быть :(

SamFR 25.10.2009 22:31

Вы вынесли инициализацию переменных в конструктор?
Тот код, который я привёл двумя постами выше, работает? Если все трейсы выводят не null (undefined), то дело, скорее всего, в каких-то других частях кода, которые вы нам не показываете :)

AlexsWulf 25.10.2009 22:53

Да вынес все переменные в конструктор.
Я боюсь что если покажу код полностью то мы меня убьете со словами: плохо написано , так не делают и т.д. :)
Попробую завтра еще по экспериментировать. Если не поможет буду выкладывать код )

Добавлено через 15 часов 2 минуты
так и не смог я победить ошибку
вот код всего класса
Код AS3:

package main {
        import flash.net.URLRequest;       
 
        import main.cursor.MouseExample;       
        import main.win_popup.lib_comp.w_modal;       
 
        import caurina.Tweener;       
 
        import flash.display.Loader;       
 
        import fl.transitions.Tween;       
 
        import api.DataAccessor;       
 
        import flash.events.Event;       
 
        import api.api_vkontakt;       
 
        import flash.display.MovieClip;
 
        /**
        * @author AlexsWulf
        * Основной класс игры
        */

 
        public class game extends MovieClip {
 
                public static const INIT : String = "start";
                public static const COMPLET : String = "comp";
 
                public static var prod_ar : product_array = new product_array();
                public static var user_m : user_money;
                public static var user_g : user_gold;
                public static var f_var : flashvars;
                public static var data_prov : DataAccessor;
                public static var user_box : box;
                public static var user_p : userPhoto;
 
 
                private var _loader : Loader;
                private var _shadow_win : w_modal;
                public static var cursor : MouseExample;
 
 
                public function game() {
 
                        startLoader();
                        showLoader(true);
                        addEventListener(game.INIT, init_listener);
                        addEventListener(game.COMPLET, comp_listener);
                        f_var = new flashvars(this);
                        data_prov = new DataAccessor(f_var.getViewer_id(), f_var.getUser_id());
                        data_prov.addEventListener(DataAccessor.INIT, function(e : Event) {
 
 
                                dispatchEvent(new Event(INIT));
                        });
 
                }
 
 
                public function init_listener(e : Event) : void {
                        user_m = new user_money();
                        addChild(user_m);
                        user_g = new user_gold();
                        addChild(user_g);
                        user_box = new box();
                        addChild(user_box);
                        cursor = new MouseExample();
                        addChild(cursor);
                        showLoader(false);
                        dispatchEvent(new Event(COMPLET));
                }
 
 
                public function comp_listener(e : Event) : void {
                        trace(e.target);
 
                        var url : String = "http://cs1205.vkontakte.ru/u14266980/c_4a75a9bb.jpg";
                        var _loap_photo : Loader = new Loader();
                        var reqest : URLRequest = new URLRequest(url);
                        _loap_photo.contentLoaderInfo.addEventListener(Event.COMPLETE, comp_listener);
                        _loap_photo.load(reqest);
                }
 
                // создаем и добавляем на сцену предзагрузчик
 
                public function startLoader(): void {
                        _shadow_win = new w_modal();
                        _loader = new Loader();
                        _loader.visible = false;
                        _loader.alpha = 0;
                        _loader.x = Math.round(const_game.GAME_X / 2 - _loader.width / 2);
                        _loader.y = Math.round(const_game.GAME_Y / 2 - _loader.height / 2);
 
                        _shadow_win.visible = false;
                        _shadow_win.alpha = 0;
                        _shadow_win.height = 1000;
                        _shadow_win.width = 1000;
                        _loader.addChildAt(_shadow_win, 0);
 
                        addChild(_loader);
                }
 
                /**
                * Показ анимации предзагрузчика
                *
                */

                public function showLoader(show : Boolean = true):void {
                        if (show) {
                                Tweener.addTween(_loader, {_autoAlpha:1, time:0.5});
                                Tweener.addTween(_shadow_win, {_autoAlpha:1, time:0.5});
                        } else if (!show) {
                                Tweener.addTween(_loader, {_autoAlpha:0, time:0.5});
                                Tweener.addTween(_shadow_win, {_autoAlpha:0, time:0.5});
                        }
                }
        }
}

и полный текст ошибки
Код:

[object game]
TypeError: Error #1010: A term is undefined and has no properties.
        at main::game/comp_listener()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at main::game/init_listener()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at MethodInfo-617()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at api::DataAccessor/initStart()
        at api::DataAccessor/onVarsProfiles()
        at MethodInfo-124()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at flash.net::URLLoader/onComplete()

Добавлено через 35 часов 2 минуты
Все разобрался с этой проблемой.
Как и говорили искал не в том месте.

Проблема была в том что в библиотеке fla файла лежал мувик прилинковынный к Loader
Всем спасибо за помощь в решении проблемы.


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

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