Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   addEventListener (http://www.flasher.ru/forum/showthread.php?t=103459)

DimG 06.11.2007 01:05

addEventListener
 
Доброго времени суток!
Возможно, этот вопрос уже задавался, но найти ничего не смог.
Такой вот вопрос: класс first:

Код:

package main
{
        import flash.display.*;
        import flash.events.*;
        import main.*;

        public class first extends MovieClip
        {
                public function first():void
                {
                        this.name = "firstMC";
                        var a:second = new second();
                        addChild(a);
                        a.addEventListener(,ef);
                }

                private function ef(e:Event)
                {
                        trace("I'm:" + this.name);
                        this.x++;
                }
        }
}



класс second:

Код:

package main
{
        import flash.display.*;
        import flash.events.*;
        public class second extends MovieClip
        {
                public function second():void
                {
                        this.name = "SecondMC";
                }
               
                private function ef(e:Event)
                {
                        trace("I'm:" + this.name);
                }
        }
}


проблема заключается в том,что трейс пишет "FirstMC"Ю хотя я регистрирую слушатель на класс second. Как это понимать? Или, независимо от того,что я написал в "объекте", команда "объект".addEventListener(....) интерпретируется как "addEventListener(....)" и назначается слушатель к объекту, откуда назначается слушатель, т.е. в данном случае объекту типа first?

etc 06.11.2007 01:29

Код синтаксически неверен.
Названия классов должны начинаться строго с большой буквы.

2morrowMan 06.11.2007 11:50

Просто надо почитать в хелпе что такое this !

7thsky™ 06.11.2007 13:09

DimG: В as3 в отличие от ас1/ас2, функция сохраняет свой scope, то есть this в теле функции будет всегда указывать на экземпляр класса в котором она определена.

Для твоих целей можно использовать Event#target, Event#currentTarget.

Код:

package main {
        import flash.display.*;
        import flash.events.*;
        import main.*;

        public class first extends MovieClip {
                ....
                private function ef(e:Event) {
                        trace("I'm:" + this.name);
                        trace('Event Dispatcher: ' + e.target);
                        this.x++;
                }
        }
}


DimG 06.11.2007 15:10

Спасибо!С этим разобрался.Попутный вопрос:
получается,что [object].addEventListener(...,ef) регистрирует слушателем [object],но при этом вызывает фунуцию, являющуюся не методом [object], а методом класса в котором дается команда addEventListner,верно?

2morrowMan 06.11.2007 19:46

Нефига не понял че ты написал, че и где что регистрирует... Пишу по своему.
Например:
Код:

myObject.addEventListener(MouseEvent.CLICK, onClick);
function onClick(event:MouseEvent):void
{
//...
}

Здесь мы подписались на прослушывание события "MouseEvent.CLICK" у объекта myObject. Теперь при возникновении события MouseEvent.CLICK, будет вызвана функция onClick().

†‡Paladin‡† 06.11.2007 19:50

Цитата:

Сообщение от DimG
Спасибо!С этим разобрался.Попутный вопрос:
получается,что [object].addEventListener(...,ef) регистрирует слушателем [object],но при этом вызывает фунуцию, являющуюся не методом [object], а методом класса в котором дается команда addEventListner,верно?

Нет. Это значит, что к объекту [object], который диспатчит эвент мы назначаем обработчик события (любом метод любого класса, которому необходимо знать о совершении события)

DimG 08.11.2007 23:23

Спасибо за ответы, очень выручили!
Еще один вопрос: если есть два файла: main.as и Second.as, (main - Document Class, Second обычные класс,наследуются от InteractiveObject), в первом создается объект object:Second, и добавляется листенер посредством команды object.addEventListener(Event.ENTER_FRAME,ef).
Теперь к делу: как удалить этот лисэнер, работая в файле Second.as? Нужно использовать ссылку на ф-ию ef относительно данного объекта?Если так, то как ее получить?
Объясните, пожалуйста!

Заранее благодарен!

†‡Paladin‡† 09.11.2007 00:51

сделай 3й класс который будет руководить остальными двумя. Это имхо правильней.

DimG 09.11.2007 10:31

Спасибо, так и сделаю. Ну а вообще такое возможно?(удалять лисэнэр посредством передачи команде removeEventListener относительносй ссылки на ф-ию- метод другого класса? )


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

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