![]() |
События мыши и их перекрытие
Здравствуйте.
Вопрос, казалось бы, простой, но ответа так и не нашла. Как сделать так, чтобы при слушателях, например, клика и MOUSE_DOWN - срабатывал либо клик, либо маус-даун? Я сделала булевы переменные - мол, не надо, я зажала и двигаю, а не кликаю. Код AS3:
Подскажите, как исправить? |
Воспользоватся одним обработчиком?
Код AS3:
|
Цитата:
|
Повесить слушатель только на MOUSE_DOWN. Считать сколько милисекунд зажата кнопка, и если дольше положенного диспатчить клик. Ну или просто вызывать функцию обработчик клика.
|
Побаловалась с идеей:
Код AS3:
Отсюда появилась извращенская идея с массивом отметок событий... но идея не сработала. Параллельное выполнение... такое параллельное... Нужно не только перекрыть MOUSE_DOWN, но и клик по окончанию перетаскивания - то есть перекрытие в обе стороны. Вот как его реализовать - все еще без понятия... |
А если подписываться и отписываться на нужные события?
|
При зажатии срабатывает только down;
при отпускании срабатывает up, click; при клике срабатывают down, up, click. Чего-то голова уже не соображает - как их организовать? Вообще закрадываются подозрения, что поскольку разница между событиями перетаскивания и клика только в длительности (down, ..., up, click vs down, up, click), придется как-то с этим работать... А таймер очень-очень не хочется. Правда еще тут же возникает идея - задействовать MOUSE_MOVE - так мы отделим перетаскивание, если мышь между зажатием и отпускание выдает MOUSE_MOVE. Но сразу же понятно, что тогда я клик от движения уже не отделю. И вот окажется, что мы сейчас велосипед изобретаем... =) |
Код AS3:
|
2 alatar - А если у нас не клик а длительное нажатие? Тогда вся теория с маусмувом накроется тазиком.
Код AS3:
А велосипед да. Помню месяца полтора назад это на форуме уже обсуждалось. Поиск по форуму может помочь... Кстати и ответы там те же были:)) Если бы не лень, то дал бы ссылку. Поиск по форуму;) |
Цитата:
|
Не перестало. Но официально и маусмув это тоже клик;) Клик считается по маусАп. Так и во всяких там дотнетах, и С++ билдерах, так же и во флеше.
Попробуй в винде тыцнуть в любую кнопку, не отпуская поводить по ней и отпустить - кнопка нажмется. А если поводить и вывести за пределы этой самой кнопки - то не нажмется. Думаю ты вкурсе этой мульки.... |
И как это все согласуется с полусекундным интервалом? Или ты свято веришь, что не может быть людей неспособных за посекунды нажать и отпустить кнопку?
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Добавлено через 3 минуты Кстати, по поводу событий, раз уж речь зашла... Как лучше их ловить? Делать главного слушателя и остальным иметь на него ссылки? Или мудрствовать, сочиняя что-нибудь более громоздкое, и не пользоваться сверх нормы бритвой Оккама? |
Цитата:
Ссылок на стандарт нету. Есть и другие реализации. К примеру на мобилах нету правой кнопки - заменяют длительным нажатием. И в таком духе. Но тем не менее то что я (да и вы тоже) приводил в пример говорит об одинаковости этого момента по-умолчанию. |
Идея с отчетом времени не годится.
Можно, например, нажимая на стейдж (при этом ранее подписываемся на MouseEvent.MOUSE_UP, MouseEvent.CLICK, MouseEvent.MOUSE_DOWN) мы получим, что при клике менее чем пол секунды происходят все три событие в такое очередности: MouseEvent.MOUSE_DOWN, MouseEvent.MOUSE_UP, MouseEvent.CLICK То есть отчет по времени не универсален. Гарантии того, что вызовем нужный обработчик - нету никакой. И по ходу идея alatarа вполне решает эту проблемку. |
Цитата:
Цитата:
|
О!, спасибо вам огромное!
alatar, этот вариант как раз подойдет, спасибо! Все-таки очень не хотеть таймер... |
| Часовой пояс GMT +4, время: 01:25. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.