Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Перетаскивание мышью. (http://www.flasher.ru/forum/showthread.php?t=137385)

cpu 12.03.2010 01:39

Перетаскивание мышью. Event.MOUSE_LEAVE.
 
На заголовок не смотрите, так назвал для поисковиков. А то все называют "Помогите плиз..."

Код AS3:

public function Background() {
                        addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
                        addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
                        stage.addEventListener(Event.MOUSE_LEAVE, handleMouseLeave);
                }
                private function handleMouseUp(e:Event):void {
                                this.stopDrag();
                }
                private function handleMouseDown(e:Event):void {
                                  ...
                        this.startDrag(false, dragRect);
                }
                private function handleMouseLeave(e:Event):void {
                        this.stopDrag();
                }
        }
}

При таком коде есть глюк(или фича :confused:):
При перетаскивании нажатой кнопкой мыши(т.е. нажал и не отпустил), и отводе курсора за stage и отпускании кнопки, перетаскиваемый объект как бы прыгает.

dimarik 12.03.2010 02:18

Цитата:

Сообщение от cpu (Сообщение 892550)
На заголовок не смотрите, так назвал для поисковиков. А то все называют "Помогите плиз..."

Вот тут у нас как бы тоже забавная фича. Видна с главной. Вы, вероятно, с тех форумов, где принято помогите плиз.

Добавлено через 2 минуты
Смешно, но только на четвертой странице увидел необходимое.
Вы уж нас с напору не пугайте, пожалуйста.

cpu 12.03.2010 02:43

Цитата:

Вы, вероятно, с тех форумов, где принято помогите плиз.
- да нет, я с тех форумов, где пишут заголовки так, что в поиске можно найти ответ.
Ничего не имею против flasher.ru , здесь львиная доля постов так и пишется.

Когда я писал свой пост, понимал, что ответом будет отсыл в FAQ.
НО: Я искал в FAQ, и не нашел.
Я искал в поиске по сайту, и не нашел.
Я искал просто в гугле, так как понимал, что вопрос скорее всего часто задваем, и НЕ НАШЕЛ:wacko:
И от грустной безисходности, решился написать здесь.

Помогите плиз...

dimarik 12.03.2010 02:49

Подняли дятьку. Ушел искать. Но это не избавляет Вас от ока etc. Вот завтра он придет и прикроет тему ) Ладно, я быстро.

Добавлено через 13 минут
Пока надыбал во втором результате поиска по MOUSE_LEAVE. Первый результат - наш.

Добавлено через 16 минут
Вот совсем забыл. А Ваш вопрос в чем заключался? А то мне даже из контекста поста не понятно.

Добавлено через 19 минут
Вот еще результат.

Добавлено через 21 минуту
А вот это вроде как противоречит пердыдущему.

cpu 12.03.2010 03:11

Код:

Вот совсем забыл. А Ваш вопрос в чем заключался? А то мне даже из контекста поста не понятно.
надыбал - здесь он четко описал, что происходит
Цитата:

, (!) при отпускании кнопки мыши за пределами флэшки мувик перескакивает на один уровень с мышкой по соответствующей оси 0о
Не напрягает... но прикольно — выходит координаты пасет,
.
Вот, а меня это напрягает, отпускаешь кнопку мыши за пределами флешки, и перетаскиваемый объект прыгает в те координаты, нельзя ли как-то убрать этот эффект (фичу)?

dimarik 12.03.2010 03:12

А как бы как он прыгает, Ваш объект? Как бы куда?

Добавлено через 2 минуты
Уже понял )

Добавлено через 3 минуты
Эм. А каким должно быть прогнозизуемое Вами поведение мувика?

cpu 12.03.2010 03:17

Цитата:

Как бы куда?
- в координаты, где я отпустил кнопку мыши. Даже не знаю как описать словами.
Нажал на объект, и тащу его(кнопку не отпускаю), курсор вышел за пределы флешки, объект перестал перетаскиваться, курсор мыши еще двигаю, кнопку не отпустил. И в момент, когда отпускаю кнопку мыши, объект как бы опомнился и резко переместился в координаты, где я отпуустил кнопку мыши.

Добавлено через 2 минуты
Цитата:

Эм. А каким должно быть прогнозизуемое Вами поведение мувика?
- так как происходит событие Event.MOUSE_LEAVE, должно срабатывать stopDrag(), и перетаскивание должно закончится, в независимости отпустил я кнопку, или нет. А здесь получается, он до сих пор отслеживает курсор мыши, и в момент отпускания почему-то (в голову не приходит почему), перемещает туда объект.

Добавлено через 8 минут
Прояснилось кое что. Если при отводе курсора мыши за пределы флешки, и при этом кнопка мыши не отпущена, событие Event.MOUSE_LEAVE не происходит.

dimarik 12.03.2010 03:28

Цитата:

Сообщение от dimarik (Сообщение 892559)
Добавлено через 19 минут
Вот еще результат.

Добавлено через 21 минуту
А вот это вроде как противоречит пердыдущему.

Первая ссылка. Надеюсь, что Вы поняли, что поиск таки рулит.

Пойду, справку посмотрю ).

cpu 12.03.2010 03:32

Цитата:

Надеюсь, что Вы поняли, что поиск таки рулит.
- да в голову не пришло, что в поиске надо Event.MOUSE_LEAVE вбить. Как обычно проблемы в неправильной постановке вопроса. Мой косяк.

dimarik 12.03.2010 03:36

Посмотрел спраку. Никогда бы сам не подумал, что MOUSE_LEAVE есть статик константа Event класса. Видать, у адоба тоже тяжелая работа )
Ну не приходила ко мне работа с этим LEAVE )

cpu 12.03.2010 03:43

Цитата:

Никогда бы сам не подумал, что MOUSE_LEAVE есть статик константа Event класса.
- вас здесь что смущает, то что статик? Я пока только учусь, и не понимаю что это мне дает. Тот пример это та же проблема, при нажатой кнопке мыши, флеш вообще не хочет что-либо делать...

dimarik 12.03.2010 03:58

К приколам флеша я привык. Вы не переживайте. Дата мой регистрации на этом форуме лишь немного отстает от даты моих начальных позывов возни с этим замечательным продуктом. Смущает, что константа принадлежит классу Event, а не MouseEvent. Но это мелочи ) По Вашему вопросу я не могу ничем помочь. Послушаем что скажет форум - 1 )

cpu 12.03.2010 04:04

Зато я много сегондя понял (прямо как в Саус парке), поизучав эту проблему.)

dimarik 12.03.2010 04:21

Вы мне льстите )

Zebestov 12.03.2010 04:34

ну :quiet: я какбе нашел выход из этой ситуации.
в моем случае, конечно же, мышь, находясь за пределами флэшки, пациента не таскает — тут все неизменно. но "подскок" убирает =)

надо просто в обработчике движения мыши (именно он перестает "щелкать" за пределами флэшки) постоянно фиксировать координаты таскаемого объекта, а в обработчике отпускания кнопки мыши прописывать эти координаты пациенту принудительно.
вот и вся любов =)

dimarik 12.03.2010 05:01

Гм. Похоже я вспомнил, как меня отучили в детстве драгом (startDrag(%arg%), аминь) пользоваться, с тех пор я его боюсь. Заменил на общеизвестный альтернативный вариант.

ЗЫ Знаю, без примеров кода на AS сложно, но так... лень )

Zebestov 12.03.2010 05:07

ну резонно...
раз уж для моего способа нужен MOUSE_MOVE, то нафига уже тогда тот драг — сам и таскай. все верно.

cpu 12.03.2010 05:10

походу я тоже отучился его использовать.)


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

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