Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   OnRollOut со всей флэшки (http://www.flasher.ru/forum/showthread.php?t=150256)

Haiat 08.02.2011 21:44

OnRollOut со всей флэшки
 
Вечер добрый!

Подскажите пожалуйста как отловить то что курсор, ушел за границы флэшки? В поиске искал по запросам "фокус" ничего подобного найти не смог к сожалению.

Суть такая, когда во флэшке подводишь мышь к краям содержимое всей флэшки перемещается (скролл карты). Когда же мышку отводишь с флэшки, курсор как бы остается у края флэшки, и карта продолжает передвигаться.

Спасибо!

mooncar 08.02.2011 22:07

В AS2 это никак. Может разве что с помощью надстройки в виде JS-функции. Либо активные области у краев сцены подрезать пикселей на 20.
В AS3 есть событие MOUSE_LEAVE, которое этот пробел закрыло.

Hauts 08.02.2011 22:18

Возможно, если верхним слоем во флэшке лежит кнопка, полностью закрывающая сцену. Тогда onRollOut сработает, но будут проблемы с событиями других кнопок.

dark256 08.02.2011 22:40

Вложений: 1
Я конечно дико извиняюсь, но вот такой примерчик - не то, что хотелось?
На примере драга. Суть движений в изначальной задаче, сами понимаете, не очень ясна :)

Код AS1/AS2:

BACKGAL.onMouseMove = function()
{
        if( _xmouse < 10 || _xmouse > Stage.width-10 || _ymouse < 10 || _ymouse > Stage.height- 10 )
        {
                MAP.stopDrag()
        }
        updateAfterEvent()
}
 
BACKGAL.onPress = function(){
        MAP.startDrag()
}
BACKGAL.onRelease = BACKGAL.onReleaseOutside = function(){
        MAP.stopDrag()
}


Hauts 08.02.2011 22:49

Хм. Как-то и внимания не обратил. А ведь dark256 ближе к истине :)

mooncar 08.02.2011 23:05

Отнюдь.
У автора не драг, с драгом-то все просто и однозачно.
У него автоматом скроллинг происходит, когда по карте мышь двигается.

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

Hauts 08.02.2011 23:09

Вложений: 1
Тогда, вероятно, можно решить кнопками, расположеными по краям флэшки.

Вот так, например: Вложение 25959

mooncar 08.02.2011 23:14

Цитата:

Сообщение от Hauts (Сообщение 971772)
Тогда, вероятно, можно решить кнопками, расположеными по краям флэшки.

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

1. JS надстройку + команду во флешку (с помощью ExternalInterface), что с нее ушли (надежно).
2. Кнопки-полоски по бокам и разрывы м/у ними и краями сцены (ненадежно).
3. Переписать на AS3 (нереально?).
4. Ввести драг (не так задумывалось).

dark256 09.02.2011 01:04

хм. но .onMouseMove ведь живет и здравствует?
хоть на энтерФрэйм повесить.
Честно говоря уже слышал про проблемы с уходм мышки, но как-то у самого ни разу не возникало проблемы.
От автора, однако, пример надобен, где там у него что не работает. Чтобы скроллируемый клип стопнуть, там есть 1001 вариант :)

mooncar 09.02.2011 01:13

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

Мои примеры:

Вот такое решение было.
Перед этим карта тоже скроллилась не при наведении на края, как по этой ссылке, а при любом проходе мыши (как раз onMouseMove был), в зависимости от ее положения. Однако вылезли такие же грабли, как у автора.

Пришлось сперва сделать как по ссылке выше, а потом и вовсе сделать драг, поскольку при маленьком окне области с кнопками начинали неудобно накладываться.


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

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