Когда кнопка мыши удерживается нажатой, почему SimpleButtons прекращает обнаружение превышения состояния? - PullRequest
0 голосов
/ 19 февраля 2011

Я надеялся получить некоторое представление о том, почему Flash действует определенным образом.Вот сценарий: если вы ...

1) добавляете SimpleButton на сцену и просматриваете SWF
2), затем нажмите и удерживайте кнопку мыши за пределами границ кнопки
3) затем перетащите курсор на SimpleButton, продолжая удерживать нажатой кнопку мыши ...

... Тогда SimpleButton на сцене не обнаруживает наведение мыши и отображает его состояние «over».Он просто остается в бездействующем состоянии.Почему это?И есть ли способ, позволяющий SimpleButton отображать свое состояние «over», пока кнопка мыши удерживается нажатой, а затем курсор помещается поверх кнопки (как описано выше)?

Это абстракция, и есливам вообще любопытно (это не детализирует вопрос, но, возможно, поможет вам визуализировать практический сценарий), что мотивирует вопрос, это приложение, которое я создаю.В этом приложении пользователь может перетаскивать миниатюры видео, чтобы изменить их порядок.Когда пользователь начинает перетаскивать видеоклип, активируется визуальный индикатор, чтобы пользователь знал, где будет размещен клип, когда пользователь отпускает кнопку мыши (например, клип был в положении 1, а пользователь перетаскивает его между клипами 4 и 5).Визуальный индикатор - SimpleButton - в идеале показывал бы пользователю, что он будет сброшен между клипами 4 и 5, если пользователь отпустит кнопку мыши).

Спасибо за понимание!

Ответы [ 3 ]

1 голос
/ 20 февраля 2011

На самом деле событие MOUSE_OVER срабатывает очень хорошо (просто добавьте прослушиватель событий с простой трассировкой - он есть!), Независимо от того, где была нажата кнопка мыши - SimpleButton просто не меняет видимое состояние.

Если вы хотите, чтобы ваша кнопка работала по-другому, вам придется создавать функции слушателя и изменять состояние вручную.Вы можете расширить класс SimpleButton и добавить set downState, upState и overState до visible = true; или visible = false; в зависимости от того, какая комбинация лучше всего подходит для вас.

0 голосов
/ 20 февраля 2011

Простой хит-тест между вашим перетаскиваемым значком и визуальным индикатором прекрасно подойдет для такого рода вещей.

У вас может быть что-то вроде этого:

function myHitTest(e:Event):void {
    if (myButton.hitTestObject(myVisualIndicator)) {
        myVisualIndicator.visible=true;
    } else {
       myVisualIndicator.visible=false;
    }
 }

При нажатии мышиможет установить прослушиватель события enterframe для этой функции и очистить его при отпускании мыши.

0 голосов
/ 19 февраля 2011

можно создать обработчик события MOUSE_MOVE и проверить, находятся ли координаты курсора внутри границ кнопки (и если они есть - переключать состояние «над»).
также MOUSE_MOVE слушатель в экземпляре кнопки может обнаружить мышь над ней, даже когда она нажата

...