Все мувиклипы
автоматически подписаны на сообщения о событиях объекта
Key. Это
означает, что вы можете определить любой из обработчиков событий клавиатуры на
своем мувиклипе, не подписываясь на сообщения о событиях от объекта
Key,
используя метод
Key.addListener(mymovieclip).
Тем не менее, если вам нужно определить один из обработчиков событий Key внутри
мувиклипа, то вы должны быть в курсе, что обработчик события сработает только
в случае, когда мувиклип, содержащий этот обработчик, имеет фокус ввода; Пользователь
может вручную изменять фокус ввода, нажимая клавишу tab; после нажатия tab вокруг
клипа, имеющего фокус ввода в данный момент, отобразится желтая рамка, если только
эта опция не отключена автором клипа:
movieclip._focusrect=false;// отключает желтую рамку фокуса
ввода
Это означает, что следующий код не будет работать, как ожидается:
this.createEmptyMovieClip("_keyListener",1);
_keyListener.onKeyDown=function(){
trace("Нажата клавиша");
}
Я ждал, что вышеприведенный код выведет слова "Нажата клавиша" в
окно вывода output, когда будет нажата клавиша.
Для получения того же результата в Flash 5 мы могли раньше, и можем сейчас,
переписать вышеприведенный код на экземпляре мувиклипа с именем _keyListener
следующим образом:
onClipEvent(KeyDown){
trace("Нажата клавиша");
}
Этот код и в Flash Player 5, и в Flash Player 6 выведет слова "Нажата
клавиша" в окно output, когда бы клавиша ни была нажата. Несмотря на это
код, который я дал в начале этой статьи:
this.createEmptyMovieClip("_keyListener",1);
_keyListener.onKeyDown=function(){
trace("Нажата клавиша");
}
не выводит слова "Нажата клавиша" в окно output в каждом случае
нажатия клавиши. Это происходи потому, что обработчик события onKeyDown
для мувиклипов отличается от обработчика событий onClipEvent(keyDown){}.
Обработчику события Flash MX onKeyDown необходимо, чтобы мувиклип
получил фокус ввода перед вызовом события. Итак, если я хочу выполнять некий код
каждый раз, когда пользователь жмет на клавишу, можно либо использовать старый
обработчик события из Flash 5 — onClipEvent(KeyDown){},
либо глобально прослушивать появление события, для чего нужно подписать мувиклип
на сообщения о событиях объекта Key:
this.createEmptyMovieClip("_keyListener",1);
Key.addListener(_keyListener);
_keyListener.onKeyDown=function(){
trace("Нажата клавиша");
}
И теперь каждый раз при нажатии клавиши на клавиатуре слова "Нажата клавиша"
показываются в окне output.
Все вышесказанное касается и метода onKeyUp в сравнении с обработчиком
события onClipEvent(keyUp){}, также, как и метода onData
с обработчиком события onClipEvent(data){}. Читайте статью MovieClip.onData
против onClipEvent(data)
[новое окно]>