Форум 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)
-   -   AddEventListner() (http://www.flasher.ru/forum/showthread.php?t=97725)

Icida 28.06.2007 01:30

AddEventListner()
 
Тема скорее всего уже поднималась, но чет поиск мне особо не помог. Буду очень благодарна, если вы мне объясните, в чем разница между
mc.addEventListener('click') и mc.onClick. Первый вариант, насколько я знаю, функциональнее. И еще очень хотелось бы разобраться с этим addEventListener(). Очень хочется почитать что-нибудь на эту тему.

У меня вот возникла такая проблема. Есть класс, в нем описывается поведение некоторых объектов на сцене. В этом классе я хочу присвоить обработчик события мувиклипу, но так,чтобы в функции обработчика события были доступны переменные класса. Т.е. например есть такой код:


Код:

class Test(){

var name;

function Test(){
  this.name = 'my name';
  _root.mc.mc_button.onRelease = this.myFunc;

}


function myFunc(){
  trace(this.name)
}
}

Так вот: в функции myFunc я получаю значение undefined т.к. она является методом объекта mc_button а не объекта класса Test. А мне нужно как раз наоборот :) А еще мне кажется, что я делаю все как-то уж слишком криво, была бы очень рада, если бы вы подкинули мне какие-нибудь приемы правильной работы с классами и слушателями событий. Вообще, про классы я перерыла немало литературы, но вот, как мне кажется, еще как-то не дошла до правильного их использования...
Заранее спасибо.

etc 28.06.2007 05:43

Для изменения области видимости в «нужную сторону» используется Delegate.
addEventListener — метод, который есть у элементов, проинициализированных EventDispatcher.

Icida 01.07.2007 16:55

Что-то совсем плохо. Перерыла кучу доков по addEventListner(). Чет никак у меня не работает в результате закрыла текущий проект, сделала новый. Положила на сцену кнопку и в первый кадр сцены написала код
Код:

myListener = new Object();
myListener.click = function(evt){
    trace(evt.type + " triggered");
}
_root.myButton.addEventListener("click", myListener);

Использую FLASH 8. Что я делаю не так?

etc 01.07.2007 17:30

1) Кнопка должна быть компонентом (стандартным):
2) У неё должно быть Instance Name равное myButton.

Icida 01.07.2007 18:39

instance Name есть. А к своим компонентам нельзя это применять? А если я создам свой мувиклип то к нему вообще нельзя addEventListener применять?

etc 01.07.2007 18:42

А это уже нужно рыть в сторону документации EventDispatcher.

wvxvw 01.07.2007 21:05

Код:

import mx.events.EventDispatcher;
//
[Event("onMyEvent")]
class Test extends MovieClip {
        var __mc:MovieClip;
        function Test(){
                __mc = rect(this, 100, 100, 0, 70);
                EventDispatcher.initialize(__mc);
                __mc["addEventListener"]("onMyEvent", this);
                __mc.onRelease = function(){
                        this["dispatchEvent"]({type:"onMyEvent"});
                }
        }
        function onMyEvent(){
                trace("native");
        }
        private function rect(_mc:MovieClip, w:Number, h:Number, c:Number, a:Number):MovieClip {
                var mc:MovieClip = _mc.createEmptyMovieClip("child"+_mc.getNextHighestDepth(), _mc.getNextHighestDepth());
                mc.beginFill(c, a);
                mc.moveTo(0, 0);
                mc.lineTo(w, 0);
                mc.lineTo(w, h);
                mc.lineTo(0, h);
                mc.lineTo(0, 0);
                mc.endFill();
                return mc;
        }
}

Код:

comp.onMyEvent = function(){
        trace("me bein overrided!");
}

Но, если честно, то это полный бред и никому не нужно, теоретически не может быть ситуации в которой call и apply не справятся.


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

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