Форум 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)
-   -   onMouseMove не прекращает работу. (http://www.flasher.ru/forum/showthread.php?t=130700)

Punk T-34 02.10.2009 01:35

onMouseMove не прекращает работу.
 
есть маленький кусочек кода.
Замысел такой: при наведении курсора мышки на определённую зону активируется добавляется объект myListener для мышки. Когда мышку уводим из зоны — myListener удаляется и движения мышки больше не считываются.
Проблема в том, что работает только первая часть кода — при наведении добавляется myListener, но когда уводим, то myListener почему-то не удаляется и движения мыши продолжают считываться по всей области экрана. Не понимаю, почему не работает onRollOut?

Код AS1/AS2:

 activeZone.onRollOver = function() { var myListener:Object = new Object();
myListener.onMouseMove = function() { здесь обработчик движений мышки };
Mouse.addListener(menuListener);
};
activeZone.onRollOut = function() { Mouse.removeListener(myListener);
};


lexa2000lexa 02.10.2009 11:52

Код AS1/AS2:

activeZone.onRollOver = function() { 
        this.onMouseMove = function() {
                trace("здесь обработчик движений мышки")
        };
}
activeZone.onRollOut = function() {
        delete this.onMouseMove
};


Punk T-34 03.10.2009 02:35

это оказалось проще, чем я думал, спасибо!
вот только я теперь не понимаю, зачем тогда создавать объект для этого?
зачем вообще в хелпе по флешу создают оъект. Какая от него практическая польза?

mooncar 03.10.2009 03:40

Когда мы регистрируем мувик в качестве объекта-слушателя, то мы-то в своем проекте знаем, что этот мувик никуда не денется со сцены и слушание будет производится всегда, когда в этом есть необходимость и пока мы явно не "отпишем" его через removeListener. (Хотя абстрактный мувик может и исчезнуть со сцены по замыслу автора - быть ремувнутым, если его создали через createEmptyMovieClip или приаттачили, или просто в нужном кадре его не будет, если он создан в авторской среде).

Но, когда серьезные дяди пишут документацию, неизвестно, будет или нет девелопером-новичком этот самый факт присутствия отслеживаться. Значит писать в документации - "назначьте слушателем любой мувик на сцене" - нельзя. Документация к коммерческому продукту - вещь не менее серьезная, чем сам продукт. Поэтому в хелпе никто не будет обговаривать всякий раз необходимость держать постоянно на сцене мувик, который попутно является еще и слушателем событий. Просто строго создается специальный объект, который и регистрируется слушателем.

Punk T-34 03.10.2009 15:38

а ясно, спасибо, mooncar.
P.S. Стиль изложения текста похож на мой — как себя читал :)

dimarik 03.10.2009 18:51

Цитата:

Сообщение от Punk T-34 (Сообщение 855078)
Проблема в том, что работает только первая часть кода — при наведении добавляется myListener, но когда уводим, то myListener почему-то не удаляется и движения мыши продолжают считываться по всей области экрана. Не понимаю, почему не работает onRollOut?

Потому что myListener отсутствует в области видимости метода onRollOut объекта activeZone;

Код AS1/AS2:

activeZone.onRollOver = function() {
        var myListener:Object = new Object();
        myListener.onMouseMove = function() {
                // do something
        };
        Mouse.addListener(myListener);
};
 
activeZone.onRollOut = function() {
        trace(myListener);// undefined
        Mouse.removeListener(myListener);
};



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

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