Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Куда переехал onReleaseOutside (http://www.flasher.ru/forum/showthread.php?t=129735)

RAlfDog 09.09.2009 02:05

Куда переехал onReleaseOutside
 
Смотрел миграции, там сказано что юзать теперь нужно mouseUp событие.
Но это событие срабатывает только если кнопка отжата на объекте, а если указатель мыши уже давно уехал с объекта, как мне поймать событие отжатия кнопки.
Т.е. я ловлю на объекте mouseDown, а mouseUp мне нужно ловить этим же объектом, но даже если указатель находится уже вне области этого объекта.
Подскажите, пожалуйста :)

wvxvw 09.09.2009 02:06

Подписаться к стейджу :)

RAlfDog 09.09.2009 03:11

Цитата:

Сообщение от wvxvw (Сообщение 849306)
Подписаться к стейджу :)

Спасибо, помогло.
Но что делать, если нужно вызывать разные методы при mouseUp? Т.е. можно ли привязать mouseUp (как аналог onReleaseOutside) к нескольким объектам, чтобы они вызывали разные методы (функции-приемники событий)?

MyXus 09.09.2009 03:18

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

RAlfDog 09.09.2009 03:23

Это как, подскажите?
Я подписываюсь так вот:
Код AS3:
stage.addEventListener(MouseEvent.MOUSE_UP,eventMetod);
Куда подписывать другие приемники???
Здесь же объект один - stage, глобальный. А мне надо чтобы фиксировалось нажатие на определенный объект (mouseDown) и фиксировалось бы "отпускание" этого объекта (mouseUp), даже если курсор мыши уже вне его.
Т.е. есть несколько объектов и нужно ловить "нажатия" на них, "отпускания" и "отпускания за границей", вызывая разные методы.

MyXus 09.09.2009 04:05

stage.addEventListener(MouseEvent.MOUSE_UP, anything.eventMetod);
stage.addEventListener(MouseEvent.MOUSE_UP, otherthing.eventMetod);

RAlfDog 09.09.2009 04:15

А разве таким образом не будет следующего:
- отжимается кнопка мыши
- stage слышит "отжатие"
- stage вызывает оба метода anything.eventMetod и otherthing.eventMetod по очереди

А хотелось бы так:
- есть два объекта object1 и object2
- нажимается кнопка мыши на object1
- отжимается кнопка мыши за границей object1
- object1 слышит "отжатие" и вызывает метод metod1 (object2 не слышит "отжатие" за границей object1 и не вызывает метод metod2)
... аналогично для object2

Alkaz 09.09.2009 09:58

если я вас правильно понял, то вам нужно просто подписываться на событие стейджа в момент когда нажали, когда отпустили - отписываемся.

switcher! 09.09.2009 11:05

как вариант, можно в object1 и object2 определить переменную flagDown = false; (+ дополнение от MyXus)
в обработчике MOUSE_DOWN нажатого объекта пишем
Код AS3:

this.flagDown = true;

(можно без this)

А в обработчиках события MOUSE_UP от stage пишете:
Код AS3:

if (!this.flagDown)
{
    return;
}
this.flagDown = false;
...

последовательно вызываются все обработчики, но по факту реализуется только обработчик нужного объекта.

RAlfDog 09.09.2009 18:14

Цитата:

Сообщение от Alkaz (Сообщение 849342)
если я вас правильно понял, то вам нужно просто подписываться на событие стейджа в момент когда нажали, когда отпустили - отписываемся.

Большое спасибо, отличная идея :)


Цитата:

Сообщение от switcher! (Сообщение 849350)
как вариант, можно в object1 и object2 определить переменную flagDown = false; (+ дополнение от MyXus)
в обработчике MOUSE_DOWN нажатого объекта пишем
Код AS3:
this.flagDown = true;
(можно без this)

А в обработчиках события MOUSE_UP от stage пишете:
Код AS3:
if (!this.flagDown) { return; } this.flagDown = false;
...
последовательно вызываются все обработчики, но по факту реализуется только обработчик нужного объекта.

Спасибо за совет, я тоже думал об этом, но хотелось более простого варианта ;)
Жаль, что onReleaseOutside разработчики потеряли в AS3 :rolleyes:


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

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