Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 23.02.2004, 20:35
Alecsandr вне форума Посмотреть профиль Отправить личное сообщение для Alecsandr Найти все сообщения от Alecsandr
  № 1  
Alecsandr

Регистрация: Dec 2003
Адрес: Москва
Сообщений: 18
Question Двойной или тройной клик

Какой Action написать кнопке, чтобы действие выполнялось после двойного или тройного клика ? Заранее спасибо всем откликнувшимся :-)

Старый 23.02.2004, 21:47
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
t=0;
Mouse.addListener(mc.onDbl={});
mc.onDbl.onMouseDown=function(){//mc - кнопка(мувик)
if(getTimer()-t<500){//500 мс
trace("double");//действия по двойному клику
}
t=getTimer();
}

Старый 23.02.2004, 22:16
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 3  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
варианта всего два:

1. добавить к приемнику события обработчик onMouseDown() и в нем отслеживать двойное (тройное) нажатие

2. добавить обработчик из п.1 куда-нибудь ОДИН раз (лучше всего в объект Mouse) и выдавать события при помощи ASBroadcaster'а

и в том и в другом случае используется getTimer() для проверки времени которое прошло с момента предыдущего клика.

первый вариант, который предложил silin, занимает обработчик онМаусДаун и требует отслеживания двойного клика в каждом объекте, слушающем двойной (тройной) щелчок

второй вариант чуть позапутаннее в реализации, но более универсален. если сделать так - то событие onDoubleClick не будет по формату ничем отличаться, например, от предопределенного события onMouseDown

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

Старый 23.02.2004, 23:05
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
можно про "выдавать события при помощи ASBroadcaster'а" примерчик, а то че-то не въехать никак

Старый 23.02.2004, 23:55
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 5  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
я когда-то писал в исходники такую штуковину...
но это было давно и не правда :)

сейчас я бы сделал так:
Код:
// —————————————————————————————————
// doubleclick event
Mouse.addListener(Mouse);
// dblclick time (msec)
Mouse.doubleClickTime = 300;
// global dblclick event generator
Mouse.onMouseDown = function() {
	var md = Mouse.onMouseDown;
	trace("["+md.click+"]"+(getTimer()-md.click)+" :: "+Mouse.doubleClickTime);
	if (md.click && (getTimer()-md.click<=Mouse.doubleClickTime)) {
		this.broadcastMessage("onDoubleClick");
	} else {
		md.click = getTimer();
	}
};
Mouse.onMouseMove = function() {
	Mouse.onMouseDown.click = 0;
};
// —————————————————————————————————
// sample:
// **
Mouse.addListener(this);
// ** 
this.onDoubleClick = function() {
	trace(this+" : doubleclicked");
};
для использования события необходимо только подписать нужны объект на события мышки, и создать обработчик onDoubleClick.

Mouse.doubleClickTime - это время между кликами в милисекундах

таким образом занят только обработчик Mouse.onMouseDown

кстати, обратите внимание на отсутствие конструкции ASBroadcaster.initialize(Mouse); которая разрешила бы объекту Mouse передавать события). объект Mouse и так передает события.

Старый 24.02.2004, 00:20
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
спасибо, так конечно вкуснее
чей-то хелп про broadcastMessage молчит че-то мы такого и не бачили вовсе

Старый 24.02.2004, 00:36
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
однако нужны еще комментарии:
если я хочу onDoubleClick к мувику привязать приходится проверять где кличешь
Mouse.addListener(mc);
mc.onDoubleClick = function() {
if(this.hitTest(_xmouse,_ymouse,true)) //иначе срабатывает везде где попало
trace(this+" : doubleclicked");
};
или я чего-то недопонял

Старый 24.02.2004, 08:00
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 8  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
ну, то что хэлп молчит - это далеко не показатель :))
21 век на дворе ! :)

дока по ASBroadcaster на английском

дока по ASBroadcaster на русском у флэш-потрошителя

да, забыл упомянуть, вся эта ботва работает под МХ (6)

Цитата:
если я хочу onDoubleClick к мувику привязать приходится проверять где кличешь
ну да, точно так же как для события onMouseDown требуется проверять где был клик, потому что это событие глобально и оповещения о нем получают все клипы сразу... дабл клик - это точно аналогичное событие.

если нужно именно нажатие на конкретный объект, то можно организовать такую же запутку с событием onPress, но тогда этот обработчик будет уже занят, и событие даблклика будет локально только для этого объекта :)

вобщем надо выбрать что необходимо в конкретном случае

Создать новую тему   Часовой пояс GMT +4, время: 06:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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