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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Jan 2010
Сообщений: 187
По умолчанию Как разделить события перетаскивания и клика по одному мувику?

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

У меня есть объект который можно и таскать и кликать на него.
Проблема в том, что при перетаскивании срабатывает и событие клика, что мне не нужно.
Я пытался ввести переменную, которая бы клик отрубала, но этоне помогло.
Подскажите, как побороть?
Код у меня такой:

Код AS3:
	hero.addEventListener(MouseEvent.CLICK, heroClick);				
	hero.addEventListener(MouseEvent.MOUSE_DOWN, heroStartDrag);			
	hero.addEventListener(MouseEvent.MOUSE_UP, heroStopDrag);		
        .....
 
	function heroClick(evt:MouseEvent):void { if (!flagclick){trace("Click!")}}
 
	function heroStartDrag(evt:MouseEvent):void { 
        trace("Start Drag"); 
        evt.currentTarget.startDrag(); 
        flagclick = true;}
 
	function heroStopDrag(evt:MouseEvent):void { 
        trace("Stop Drag"); 
        evt.currentTarget.stopDrag(); 
        flagclick = false;}

Старый 09.09.2011, 12:23
Gogan вне форума Посмотреть профиль Отправить личное сообщение для Gogan Найти все сообщения от Gogan
  № 2  
Ответить с цитированием
Gogan

Регистрация: Mar 2009
Сообщений: 65
Код AS3:
hero.addEventListener(MouseEvent.MOUSE_MOVE, heroStartDrag);
hero.addEventListener(MouseEvent.MOUSE_UP, heroStopDrag);
 
private function handleMouseMove(event:MouseEvent):void
{
        if (event.buttonDown)
        {
              //do drag
             hero.removeEventListener(MouseEvent.CLICK, heroClick);
        }
}
 
function heroStopDrag(evt:MouseEvent):void { 
        trace("Stop Drag"); 
        evt.currentTarget.stopDrag(); 
        flagclick = false;
        hero.addEventListener(MouseEvent.CLICK, heroClick);
}


Последний раз редактировалось Gogan; 09.09.2011 в 12:26.
Старый 09.09.2011, 12:48
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 3  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Не очень понял. Вероятно вместо функции handleMouseMove вы имели ввиду heroStartDrag?
Я попробовал так. Не заработало.

Код AS3:
hero.addEventListener(MouseEvent.CLICK, heroClick);				
hero.addEventListener(MouseEvent.MOUSE_MOVE, heroStartDrag);			
hero.addEventListener(MouseEvent.MOUSE_UP, heroStopDrag);		
...
	function heroClick(evt:MouseEvent):void {trace("Click!")}
 
	function heroStartDrag(evt:MouseEvent):void {  
         if (evt.buttonDown){
            trace("Start Drag"); 
            evt.currentTarget.startDrag(); 
            flagclick = true;}}
 
	function heroStopDrag(evt:MouseEvent):void { 
             trace("Stop Drag"); 
             evt.currentTarget.stopDrag(); 
             flagclick = false;}

Старый 09.09.2011, 13:06
Gogan вне форума Посмотреть профиль Отправить личное сообщение для Gogan Найти все сообщения от Gogan
  № 4  
Ответить с цитированием
Gogan

Регистрация: Mar 2009
Сообщений: 65
да , не работает отписка... сейчас


Последний раз редактировалось Gogan; 09.09.2011 в 13:09.
Старый 09.09.2011, 13:14
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 5  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
В AS2 как-то решал такую задачу. После нажатия вычислялось - было смещение после нажатия (onPress) или нет. Если не было - на onRelease выполнялись действия, задуманные по клику. Если же смещение после onPress было - то ничего дополнительно не предпринималось.
Возможно данный алгоритм можно и в AS3 через MOUSE_DOWN, MOUSE_UP и проверку смещения попробовать?
__________________
Идите первым!

Старый 09.09.2011, 13:18
Gogan вне форума Посмотреть профиль Отправить личное сообщение для Gogan Найти все сообщения от Gogan
  № 6  
Ответить с цитированием
Gogan

Регистрация: Mar 2009
Сообщений: 65
Решение в лоб :
Код AS3:
 
hero.addEventListener(MouseEvent.MOUSE_MOVE, heroStartDrag);			
hero.addEventListener(MouseEvent.MOUSE_UP, heroStopDrag);		
hero.addEventListener(MouseEvent.CLICK, heroClick); 
 
var isHeroMoved:Boolean;
var isDragged:Boolean;
 
	function heroClick(evt:MouseEvent):void {
		if(isHeroMoved)
		{
			isHeroMoved = false;			
		}
		else
		{
			trace("Click!")
		}
 
 
		}
 
	function heroStartDrag(evt:MouseEvent):void {  
         if (evt.buttonDown){
hero.removeEventListener(MouseEvent.CLICK, heroClick);
 
            evt.currentTarget.startDrag(); 
			isDragged = true;
            }
 
			}
 
	function heroStopDrag(evt:MouseEvent):void { 
             trace("Stop Drag"); 
             evt.currentTarget.stopDrag();			 
             if(isDragged)
			 {
				isHeroMoved = true;
				isDragged = false;
			 }
 
 
             }
Может и не очень красиво с двумя флажками, зато работает

Старый 09.09.2011, 13:27
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 7  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Не совсем. Сообщение "Click" не выдаётся.
Вложения
Тип файла: rar test7.rar (6.2 Кб, 31 просмотров)

Старый 09.09.2011, 14:31
alex3dsflash вне форума Посмотреть профиль Отправить личное сообщение для alex3dsflash Найти все сообщения от alex3dsflash
  № 8  
Ответить с цитированием
alex3dsflash
[+1.3 30.09.11]
[+ 31.08.11]

Регистрация: Sep 2010
Сообщений: 95
А я делал задержку по времени

Старый 09.09.2011, 14:34
Gogan вне форума Посмотреть профиль Отправить личное сообщение для Gogan Найти все сообщения от Gogan
  № 9  
Ответить с цитированием
Gogan

Регистрация: Mar 2009
Сообщений: 65
Цитата:
Сообщение от In8Finity Посмотреть сообщение
Не совсем. Сообщение "Click" не выдаётся.
Да, снова поспешил я, наверное не оттуда скопировал...
Удалить нужно эту вот строку:

Код AS3:
hero.removeEventListener(MouseEvent.CLICK, heroClick);

Старый 09.09.2011, 14:37
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 10  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Ура! Вот теперь заработало.
Спасибищще!

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

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

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


 


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


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