Flash Sprite теряет фокус на событие MOUSE_DOWN - PullRequest
0 голосов
/ 15 января 2011

Мой Sprite класс теряет фокус, когда я щелкаю мышью, особенно после события MOUSE_DOWN (до завершения щелчка).

Я установил для детей mouseEnabled false, без изменений. Я добавил слушатель для FOCUS_OUT и заметил, что свойство FocusEvent.relatedObject имеет значение NULL, что меня смущает - разве это не означает, что нет новой цели фокусировки, фокус просто теряется?

Точная последовательность событий, которые я получаю, отслеживая их, когда я нажимаю:

[FocusEvent type="focusOut" bubbles=true cancelable=false eventPhase=2 relatedObject=null shiftKey=false keyCode=0]
[MouseEvent type="mouseDown" bubbles=true cancelable=false eventPhase=2 localX=355 localY=362 stageX=360 stageY=367 relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=true delta=0])
[MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=355 localY=362 stageX=360 stageY=367 relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=false delta=0]

Ответы [ 2 ]

2 голосов
/ 16 января 2011

Попробуйте установить mouseChildren = false; на спрайте вместо mouseEnabled = false; на дочерних элементах.Если дочерним элементам спрайта присвоено значение mouseEnabled, равное false, ни один из видимых элементов, содержащихся в вашем спрайте, не будет активным, кроме фигур, нарисованных непосредственно в его собственной графике.Затем вы фактически нажимаете «через» детей и на сцене.

[EDIT]:

Я создал тест, чтобы воспроизвести вашу проблему.Вы правы - фокус таинственным образом теряется при нажатии на спрайт, хотя можно было бы ожидать, что это фактически установит фокус на нем.То же самое верно для MovieClips, но не для TextFields.Это может быть непрактично, но вы можете обойти это, добавив собственный обработчик mouseDown:

private function onMouseDown (ev:Event) : void {
    if (stage.focus != sprite) stage.focus = sprite;
}
0 голосов
/ 23 августа 2011

Если вы расширяете любой InteractiveObject , вы должны установить tabEnabled = true;.Это заставит ваш клик на объекте получить фокус.

Будьте осторожны: если tabEnabled равно false , но mouseChildren равно , тогда stage.focus будет установленв ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...