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

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

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

Регистрация: Feb 2008
Сообщений: 890
По умолчанию Перетаскивание спрайта и различные координаты мыши

Нашел баг, а может и фичу, но очень уж странную.

При перетаскивании объекта target в установленных рамках при отжатии мыши target.mouseX, target.mouseY, stage.mouseX, stage.mouseY имеют значения в точке зажатия объекта для перетаскивания, а не в точке, где была мышь во время дропа. Без установки рамок - все ок.

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

Код AS3:
var s:Sprite = new Sprite();
addChild(s);
s.graphics.beginFill(0);
s.graphics.drawRect(0, 0, 100, 100);
 
s.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);
function mouseDownListener(e:MouseEvent):void
{
	s.startDrag(false, new Rectangle(0, 0, 100, 100));
	//s.startDrag(false, null); - все ок!
}
 
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener);
function mouseUpListener(e:MouseEvent):void
{
	s.stopDrag();
 
	trace(s.mouseX, s.mouseY);
	trace(stage.mouseX, stage.mouseY, "\n");				
}
UPD: если при дропе мышь в рамках движения объекта, то вроде тоже все ок.

Как же вытащить реальные координаты мыши во время дропа?
__________________
скриптограф


Последний раз редактировалось orcpochta; 20.12.2010 в 16:27.
Старый 20.12.2010, 16:37
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 2  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
MouseEvent.MOUSE_MOVE

Старый 20.12.2010, 16:47
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 3  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Про эти костыли я догадался))) Можно еще короткий таймер наверно включать при дропе, чтобы он уже сверил координаты мыши)))
__________________
скриптограф

Старый 20.12.2010, 17:14
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 4  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
это не костыли
события MouseEvent.MOUSE_DOWN и MouseEvent.MOUSE_UP возникают только в начале и конце перетаскивания

во время перетаскивания снимаем координаты по событиям:
- MouseEvent.MOUSE_MOVE
- Event.ENTER_FRAME
- TimerEvent.TIMER

Старый 20.12.2010, 17:53
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 5  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
если внимательно читать, то интересует именно момент дропа - т.е. событие "MOUSE_UP")))
__________________
скриптограф

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Действительно занятное поведение.

Может дело в этом:
Цитата:
bounds:Rectangle (default = null) — Значение относительно координат родительского объекта Sprite, задающее для него закрепленный прямоугольник.
Кстати, возможно это просто глюк.
Если повесить на МаусМув выдачу координат стэйдж.маусИкс/Игрек, то они выдаются правильно, в обработчике mouseUpListener неправильно, а потом - опять правильно.


Последний раз редактировалось mikhailk; 20.12.2010 в 18:13.
Старый 20.12.2010, 18:46
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
ИМХО вполне логичное поведение при драге. Хотите реальные координаты, берите их из event.stageX / stageY.

Старый 20.12.2010, 18:49
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 8  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
О, забыл про них)))

UPD:
А не, не забыл! Я просто не имею к ним доступа, т.к. подписываюсь на собственное событие компонента, который говорит, что произошло дропанье предмета, и ессно stageX, stageY не передает. Я думал, что можно, конечно, добавить эти поля, но они как-то совсем не к месту там в этом простеньком событии.
__________________
скриптограф


Последний раз редактировалось orcpochta; 20.12.2010 в 19:02.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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