Лого Флэша Потрошителя
 
Новости · Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Идеальный клип · Что делать  
onKeyDown против onClipEvent(keyDown)
23.05.2002 01.10.2002
Все мувиклипы автоматически подписаны на сообщения о событиях объекта 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)

[новое окно]>

Дэдлайн

 

Примечания:
Эта статья еще раз показывает, что новое не всегда лучше старого

Статус документа
: публикация
>>> Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Что делатьНаверх
  © Разработка: Ростислав Сирык · О проекте "Флэш Потрошитель" · Архивы сайта
Flash MX

Стандарты Actionscript

Внутренняя архитектура Actionscript

Атрибуты тэгов OBJECT и EMBED

Метод LoadVars.decode

Свойство Stage.showMenu

System.security.allowDomain

System.showSettings

Динамическое присоединение компонентов

onKeyDown против onClipEvent(keyDown)

Модель событий Flash MX

ASBroadcaster — ядро модели событий Flash MX

Чтение ID3-тэгов из файла .mp3

ASSetPropFlags — функция защиты свойств объектов

Объект Local SharedObject

Удаление Local SharedObject

Глобальный путь к классам

Level против root

Dreamweaver

Создаем расширение для Dreamweaver MX

Настройка Dreamweaver MX

Длинное тире, короткое тире, дефис. Правописание и Dreamweaver

Illustrator

Растеризация текста
FlexiPedia