Форум 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)
-   -   Как сделать собственного слушателя для своего Класса (http://www.flasher.ru/forum/showthread.php?t=130609)

Art_133 30.09.2009 01:29

Как сделать собственного слушателя для своего Класса
 
Привет.Пишу некий Класс. Нужно создать слушателя в этом Классе.
На пример ели переменная i == 0 вызывается слушатель.
Примеры:
Код AS1/AS2:

экземплярКласса.onMotionFinished;
экземплярКласса.onMotionStarted;
экземплярКласса.onMotionChanged;

Как можно подобное реализовать? Что по читать? Спасибо!

silin 30.09.2009 15:39

слушатель это метод, который вызывается при опреленных условиях
в данном случае когда i==0
чтобы отследить это, i должна быть геттером/сеттером
простейший случай - собственный метод: в сеттере проверяем, вызываем метод
Код AS1/AS2:

class PropWatcher
{
        private var _i:Number;
 
        private function onZero()
        {
                trace( "onZero listener "  );
        }
 
        public function get i():Number { return _i; }
        public function set i(value:Number):Void
        {
                if (_i != value)
                {
                        _i = value;
                        if (_i == 0) onZero()
 
                }
        }
}
///////////////////////
var test:PropWatcher = new PropWatcher();
test.i = 0;


если нужно вызывать одноименные обрабочики в других объектах, то можно воспользоваться методами AsBroadcaster (добавив их к экземпляру через AsBroadcaster.initialize), тогда у всех объектов, подписанных на прослушку экземпляра PropWatcher срабоатет метод onZero
Код AS1/AS2:

class PropWatcher
{
        private var _i:Number;
        private var broadcastMessage:Function;
        public var addListener:Function;
        public var  removeListener:Function;
 
        public function PropWatcher()
        {
                AsBroadcaster.initialize(this);
        }
 
        public function get i():Number { return _i; }
 
        public function set i(value:Number):Void
        {
                if (_i != value)
                {
                        _i = value;
                        if (_i == 0) broadcastMessage("onZero");
 
                }
        }
 
}
//////////////////////////////////////
var test:PropWatcher = new PropWatcher();
test.addListener(this);
test.i = 0;
 
function onZero()
{
        trace( "onZero listener "  );
}

ну и наконец можно посмотреть в mx.events.EventDispatcher
в целом схема такая же как и с AsBroadcaster, но подписывается на прослушку не объект, имеющий одноименный событию метод, а вообще любой метод, что бывает удобнее

Art_133 30.09.2009 16:48

Спасибо. Буду разбираться.

letsrock85 05.08.2011 20:28

мне этот метод сегодня спас жизню! Спасибо silin!

Котяра 05.08.2011 21:15

а можно и почти AS3 события использовать.


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

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