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

O.K. 20.04.2010 21:13

Не ловит событие загрузки
 
Подскажите пожалуйста, почему не отлавливается событие загрузки. Не вызывается функция onLoaded
Код AS3:

package {
        import flash.events.EventDispatcher;
        import flash.events.Event;
        import flash.display.Loader;
        import flash.net.URLRequest;
        import flash.events.MouseEvent;
        import flash.external.ExternalInterface;
        public class mcArray extends EventDispatcher
        {
        public var _arr:Array;
        private var _data:parsedXML;
        private var loader:Loader;
        private var loaded:Number=0;
        public var id:String;
        public var constId:Number;
 
        public function mcArray (d:parsedXML)
                {
                        _arr=new Array();
                        _data=d;       
 
 
                }
 
        function onLoaded (e:Event)
                {
                        trace("=)")
 
                        e.target.y=e.target.height-175
                        e.target.x=e.target.width-120
 
 
                        loaded++;
                        if (loaded==_data._arr.length())
                        {
                                dispatchEvent (new Event("Loaded"));
                        }
                }
 
                function handleClick (e:MouseEvent)
                {
 
                        var id=e.currentTarget.jid
                        ExternalInterface.call("Load",id);
 
                        var i:int=0;
                        for each (var el:Array in _data._arr)
                        {
                                if (String(el[1])==id)constId=i;
                                i++;
                        }
 
                        dispatchEvent (new Event("Clicked"));
                }
 
                function make()
                {
                        for each(var i:Array in _data._arr)
                        {
                                var tmp:container=new container;
                                trace("=(")
                                loader=new Loader();
                                loader.addEventListener(Event.COMPLETE,onLoaded);
                                loader.load(new URLRequest(i[0]));
                                with (tmp)
                                {
                                        jid = String(i[1]);
                                        tfmc.tf.text=i[2];
                                        cont.addChild(loader);
 
                                        addEventListener(MouseEvent.CLICK,handleClick);
                                        cont.buttonMode=true;
                                        tfmc.mouseChildren=false
                                        tfmc.buttonMode=true;
                                }
                                _arr.push(tmp);
                        }
                        //dispatchEvent (new Event("Loaded"));
                }
 
 
 
 
        }
}


mikhailk 20.04.2010 22:27

сорри за оффтоп, но когда в описании вакансии указано "умение разбираться в чужом коде", я кажется представляю, что они имеют в виду...

Из конструктора ничего не вызывается.
Что вообще планировалось сделать? :)

O.K. 20.04.2010 22:46

Вобщем проблема в том что когда я гружу картинки
Код AS3:

loader=new Loader();
loader.addEventListener(Event.COMPLETE,onLoaded);
loader.load(new URLRequest(i[0]));

то загружаясь, они не вызывают обработчик onLoaded, мож изза того что я eventDispatcher extends...

Вызывается все из другого класса - т.е. картинки вижу они грузятся, но событие не срабатывает

Psycho Tiger 20.04.2010 22:47

А, ну ок. Короче, у вас не код, а тихий ужас. Но понимание этого придёт со временем)
Так же следует добавить что вы не указали что вызываете метод make - я сам должен додумывать?
А ошибка в том, что на Event.COMPLETE надо подписывать не loader, a loader.contentLoaderInfo

O.K. 20.04.2010 23:08

Точно! Спасибо, забыл)

Кстати, а почему тихий ужас? Тоесть, откровенно говоря "это я ещё старался" - раньше я тупо всё лепил в один класс, а тут както решил постараться разбить на несколько: один грузит данные другой отображает итп..

Если можно, еще вопрос:
Код AS3:

e.target.y=e.target.height-175
e.target.x=e.target.width-120

Это как я понял бред, а как всетаки отцентровать кпримеру картинку закруженную в событии COMPLETE?

cauchy 21.04.2010 13:02

Цитата:

Сообщение от O.K. (Сообщение 902084)
Кстати, а почему тихий ужас?

Ну что беглым взглядом увидел:
- само собой проблема с ТАБами;
- переменные странно называются, одни с подчёркивания, другие - нет. Обычно приватные с подчёркивания, а тут и те и те (и наоборот соответственно);
- желательно явно писать типа функции (ну то есть public);
- обработчики должны быть private функциями;
- надо явно объявлять тип возвращаемого значения, то бишь ":void";
- ну Адоби рекомендует ещё обработчики называть специальным образом, можно у них где то почитать про это;
- помоему что-то слышал про то, что оператор with не рекомендуют использовать, типа это остатки первого AS. Но в этом не уверен. Сам лично ни разу не использовал.

Вот как-то так я бы сказал.

Насчёт расстановки скобок спорный вопрос, я сам открывающую привык ставить на новой строке, но так и не понял как правильней считается (хотя какая разница на самом деле). Замечал что в основном открывающую ставят на той же строке что и определение функции, я же почему-то привык иначе.

Цитата:

Сообщение от O.K. (Сообщение 902084)
Если можно, еще вопрос:
Код AS3:

e.target.y=e.target.height-175
e.target.x=e.target.width-120

Это как я понял бред, а как всетаки отцентровать кпримеру картинку закруженную в событии COMPLETE?

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

var bitmap:Bitmap = e.target;
bitmap.y = bitmap.height - 175
....
bitmap = null;

Наверное если больше одного действия будет выполняться с этой картинкой то такой способ даже быстрее будет работать. Ведь не придётся каждый раз лезть в геттер объекта "e". Но в таких тонкостях я не силён, это только предположение :)


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

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