PDA

Просмотр полной версии : Отследить положение мыши, возможно?


Surus
25.08.2009, 23:01
Сделали нам баннер флешевый. Все как мы хотели кроме одного единственного трабла, который фирма которая делала баннер так и не смогла победить.
Опишу в чем трабл.
Наводя мышью на баннер происходят некие дейтствия. Уводя мышь с баннера нужно чтобы баннер возвращался в исходное состояние.
Для этого по всем краям баннера сделаны определенный поля в 10 пикселей, пересекая которые мышью баннер получает сигнал вернутся в исходное состояние. Проблема в том, что если мышь убрать от баннера быстро, эти поля не всегда успевают отследить что мышь прошла над ними. Баннер остается в последнем положении не возвращаясь в исходное состояние.

На вопрос, неужели нельзя сделать отслеживание находится ли мышь над баннером, нам ответили что такое невозможно.

Помогите плз как решить эту проблему. Фирма нам пообещала доделать баннер если мы намекнем как это решить.

Заранее огромное спасибо!

VVall
25.08.2009, 23:10
В AS3 добавлено событие MOUSE_LEAVE.

Surus
25.08.2009, 23:44
Нам нужно сохранить баннер в флеше 6 версии. АС3 позволит такое?

Алиль
25.08.2009, 23:45
в AS 2.0 это onMouseMove

VVall
25.08.2009, 23:51
Нам нужно сохранить баннер в флеше 6 версии. АС3 позволит такое?
AS3 с 9-ой версии. Честно говоря, не понимаю, в чём смысл ориентироваться на совместимость с настолько устаревшим ПО, тем более что даже AS2 появился только в 7-ой версии (2003 год). Вам, конечно, виднее, чего хотеть, но посмотрите на всякий случай на эти цифры (http://www.adobe.com/products/player_census/flashplayer/version_penetration.html).

Surus
26.08.2009, 00:35
AS3 с 9-ой версии. Честно говоря, не понимаю, в чём смысл ориентироваться на совместимость с настолько устаревшим ПО, тем более что даже AS2 появился только в 7-ой версии (2003 год). Вам, конечно, виднее, чего хотеть, но посмотрите на всякий случай на эти цифры (http://www.adobe.com/products/player_census/flashplayer/version_penetration.html).


А можно поподробнее? Как его использовать?

mooncar
26.08.2009, 01:27
Действительно, намекните этой фирме, что можно попробовать использовать MouseMove и повесить на эту функцию проверку на hitTest с координатами указателя мыши.
Проверка будет осуществляться непрерывно, и как только hitTest выдаст false, это можно использовать сигнал для возврата на исходное состояние.

aksios
26.08.2009, 01:35
Surus, суть в том, что событийная модель 6го плеера тут Вам не поможет, поскольку опрос мыши в браузере происходит слишком медленно.
Могу намекнуть, как можно улучшить:
Нужно смотреть не координаты мыши, а направление и скорость движения, если мышь перестает двигаться, то можно вычислить ее координаты, как если бы она продолжала движение с прежней скоростью и направлением. Если расчитываемая точка находится за приделами сцены, то нужно сделать небольшую паузу - подождать не появяться ли новые значения координат мыша и если нет, то принять решение, что мышь покинула сцену. Ошибки тоже будут, но их будет меньше.
Я бы также рекомендовал для воспитания торопыжек делать указатель мыши невидимым в клипе и заменять его к примеру анимированным клипом со шлейфом, который будет появляться исчезать в зависимости от скорости перемещения.

udaaff
26.08.2009, 01:36
Действительно, намекните этой фирме, что можно попробовать использовать MouseMove и повесить на эту функцию проверку на hitTest с координатами указателя мыши.
Проверка будет осуществляться непрерывно, и как только hitTest выдаст false, это можно использовать сигнал для возврата на исходное состояние.
И когда же он false выдаст?

С mouse leave сделать и не париться.

aksios, овчинка выделки не стоит в данном случае.

aksios
26.08.2009, 02:01
udaaff, чисто из спортивного интереса.
UPD: Кстати да, MOUSE_LEAVE рулит в АС3.

mooncar
26.08.2009, 02:14
И когда же он false выдаст?

Верно, не получится, я поторопился.

Surus
26.08.2009, 18:51
И что же делать? На АС3 переходить по многим причинам не будут, нужно это решить на АС2.

mooncar
26.08.2009, 18:54
Смотрите тогда сторону JS - это ваше спасение.
Напишите на JS функцию, которая бы отслеживала положение мыши так, что когда мышь не находится на блоке с флешкой, эта функция бы возвращала бы флешку в исходное состояние.
Для этого также нужно будет со cтороны флеша задействовать метод ExternalInterface.addCallback, который бы обеспечил флешке понимание, что к ней обращаются извне, из JavaScript.
Резюме:
Либо - AS3, либо - JS + ExternalInterface.

Кстати, нужную функцию JS можно попробовать сгенерировать прямо изнутри флешки.

fr0sTy
26.08.2009, 22:56
Можно сделать прозрачную штуку, привязать ее к курсору и отслеживать координаты

mooncar
26.08.2009, 23:08
Можно сделать прозрачную штуку, привязать ее к курсору и отслеживать координаты
Это вы про JavaScript или про флеш?

udaaff
26.08.2009, 23:11
Можно сделать прозрачную штуку, привязать ее к курсору и отслеживать координаты
Какой смысл привязывать что-то к курсору, если координаты курсора есть и так.
Вот только они не отслеживаются за пределами ролика.
Кроме onReleaseOutside за пределами флешки, словить, по моему, ничего нельзя.

Это вы про JavaScript или про флеш?
скорее всего про флеш

Жень Шень
27.08.2009, 11:06
Привет!
Не вдаваясь в подробности из-за дефицита времени прикладываю исходник (с этого форума, кажется), в котором идет речь о поднятых тут проблемах. Если поможет, то буду рад.