|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2010
Сообщений: 187
|
Как разделить события перетаскивания и клика по одному мувику?
Как разделить события перетаскивания и клика по одному мувику?
У меня есть объект который можно и таскать и кликать на него. Проблема в том, что при перетаскивании срабатывает и событие клика, что мне не нужно. Я пытался ввести переменную, которая бы клик отрубала, но этоне помогло. Подскажите, как побороть? Код у меня такой: 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;} |
|
|||||
Регистрация: Mar 2009
Сообщений: 65
|
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. |
|
|||||
Регистрация: Jan 2010
Сообщений: 187
|
Не очень понял. Вероятно вместо функции handleMouseMove вы имели ввиду heroStartDrag?
Я попробовал так. Не заработало. 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;} |
|
|||||
Регистрация: Mar 2009
Сообщений: 65
|
да , не работает отписка... сейчас
Последний раз редактировалось Gogan; 09.09.2011 в 13:09. |
|
|||||
Модрон-ветеринар
|
В AS2 как-то решал такую задачу. После нажатия вычислялось - было смещение после нажатия (onPress) или нет. Если не было - на onRelease выполнялись действия, задуманные по клику. Если же смещение после onPress было - то ничего дополнительно не предпринималось.
Возможно данный алгоритм можно и в AS3 через MOUSE_DOWN, MOUSE_UP и проверку смещения попробовать?
__________________
Идите первым! |
|
|||||
Регистрация: Mar 2009
Сообщений: 65
|
Решение в лоб :
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; } } |
|
|||||
Регистрация: Jan 2010
Сообщений: 187
|
Не совсем. Сообщение "Click" не выдаётся.
|
|
|||||
[+1.3 30.09.11]
[+ 31.08.11] Регистрация: Sep 2010
Сообщений: 95
|
А я делал задержку по времени
|
|
|||||
Регистрация: Mar 2009
Сообщений: 65
|
Да, снова поспешил я, наверное не оттуда скопировал...
Удалить нужно эту вот строку: |
|
|||||
Регистрация: Jan 2010
Сообщений: 187
|
Ура! Вот теперь заработало.
Спасибищще! |
Часовой пояс GMT +4, время: 02:19. |
|
« Предыдущая тема | Следующая тема » |
|
|