Когда кнопка мыши удерживается нажатой, почему SimpleButtons прекращает обнаружение превышения состояния?
Я надеялся получить некоторое представление о том, почему Flash действует определенным образом. Вот сценарий: если вы...
1) добавить SimpleButton на сцену и просмотреть SWF
2) затем нажмите и удерживайте кнопку мыши за пределами границ кнопки
3) затем перетащите курсор на SimpleButton, удерживая нажатой кнопку мыши...
... Затем SimpleButton на сцене не обнаруживает наведение мыши и отображает его состояние "над". Он просто остается в бездействующем состоянии. Почему это? И есть ли способ, позволяющий SimpleButton отображать свое состояние "over", пока кнопка мыши удерживается нажатой, а затем курсор помещается поверх кнопки (как описано выше)?
Это абстракция, и если вам вообще любопытно (это не детализирует вопрос, но, возможно, поможет вам визуализировать практический сценарий), что мотивирует вопрос, это приложение, которое я создаю. В этом приложении пользователь может перетаскивать миниатюры видео, чтобы изменить их порядок. Когда пользователь начинает перетаскивать видеоклип, активируется визуальный индикатор, чтобы пользователь знал, где будет размещен клип, когда пользователь отпускает кнопку мыши (например, клип был в положении 1, а пользователь перетаскивает его между клипами 4 и 5). Визуальный индикатор - SimpleButton - в идеале показывал бы пользователю, что он будет сброшен между клипами 4 и 5, если пользователь отпустит кнопку мыши).
Спасибо за понимание!
3 ответа
На самом деле событие MOUSE_OVER срабатывает очень хорошо (просто добавьте прослушиватель событий с простой трассировкой - он есть!), Независимо от того, где была нажата кнопка мыши - SimpleButton просто не меняет видимое состояние.
Если вы хотите, чтобы ваша кнопка работала иначе, вам придется создавать функции слушателя и изменять состояние вручную. Вы можете расширить класс SimpleButton и добавить set downState, upState и overState в visible = true;
или же visible = false;
в той комбинации, которая подходит вашему желаемому поведению лучше всего.
Простой хит-тест между вашим перетаскиваемым значком и визуальным индикатором отлично подойдет для такого рода вещей.
Вы могли бы иметь что-то вроде этого:
function myHitTest(e:Event):void {
if (myButton.hitTestObject(myVisualIndicator)) {
myVisualIndicator.visible=true;
} else {
myVisualIndicator.visible=false;
}
}
При наведении мыши вы можете установить прослушиватель события enterframe для этой функции и очистить его при отпускании мыши.
Можно создать MOUSE_MOVE
обработчик событий и проверьте, находятся ли координаты курсора внутри границ кнопки (и если они есть - переключите состояние "над").
также MOUSE_MOVE
слушатель в экземпляре кнопки может обнаружить мышь над ней, даже когда она нажата