Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Проблема с AsBroadcaster (http://www.flasher.ru/forum/showthread.php?t=122051)

BBOY Ильич 01.03.2009 17:51

Проблема с AsBroadcaster
 
Добрый день! Помогите решить следующую проблему:

Имеется класс

Код AS1/AS2:

class utilities.Events 
{
 
        private static var _event:Object = new Object();
 
        public function Events()
        {
                AsBroadcaster.initialize(_event);
        }
 
        public static function dispatchEvent(event:String, param:Object):Void
        {
                _event.broadcastMessage(event, param);
        }
 
        public static function addEventListener (type:String, func:Function):Void
        {
                var _listener:Object = new Object ();
                _listener[type] = func;
                _event.addListener(_listener);
        }
 
}


В другом классе я подписываюсь на событие:

Код AS1/AS2:

utilities.Events.addEventListener("event", myFunction);

Ну и наконец оправляю событие:
Код AS1/AS2:

utilities.Events.dispatchEvent("event");



В итоге - тишина, ничего не работает. :(
Спасибо.

qazwsx 01.03.2009 17:59

А почему не EventDispatcher?

BBOY Ильич 01.03.2009 18:01

Не нашел в хэлпе упоминания о нем:)


______________


Подписываюсь на событие я в классе, который прикрепил к мувиклипу через библиотеку:
Код AS1/AS2:

import utilities.Events;
 
class musicscreen.icons.IconBattery extends MovieClip
{
 
        public function IconBattery()
        {
                Events.addEventListener("event", myFunc);
        }
 
        public function myFunc()
        {
                trace("event is dispatched");
        }
 
}

При этом, конструктор класса вызывается, но на событие мы не подписываемся. В чем проблема?

DarkLight 01.03.2009 18:45

Гм. Конструктор Events не вызывается, так как используются только его статические методы. Соответственно, броадкастер не инициализируется и ничего не происходит. переименуй констркутор в статический метод и вызывай его перед добавлением листенеров, либо введи флаг, который показывает инициализирован ли броадкастер, и инициализируй внутри Events при первом вызове addEventListener или dispatchEvent

BBOY Ильич 01.03.2009 18:46

DarkLight, спасибо, но я вызываю конструктор из главного класса, так что броадкастер инициализируется.

Проблема, я так понимаю, в том, что броадкастер инициализируется позже подписывания на событие...


_________


Цитата:

либо введи флаг, который показывает инициализирован ли броадкастер, и инициализируй внутри Events при первом вызове addEventListener или dispatchEvent
Спасибо! Все вышло :)

qazwsx 01.03.2009 18:52

EventDispatcher в компонентах 2.0 описан. mx.events.EventDispatcher;. Такой диспатчер самому сделать тоже труда особого не составит >_>. К сожелению в нем нет ничего волшебного:(

DarkLight 01.03.2009 18:53

Проверь порядок вызова и проставлен ли импорт. Код работает.

qazwsx 01.03.2009 19:40

Ну да потому он и написал что все вышло )


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

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