События клавиатуры [KeyboardEvent] в ActionScript 3.0

Для взаимодействия с пользователями интерактивные flash-приложения, как правило, используют или мышиные события (MouseEvent), или ввод с клавиатуры (KeyboardEvent). Именно о клавиатурных событиях в языке ActionScript 3.0 и пойдёт речь далее.

Первым делом стоит заметить, что имеется два вида событий клавиатуры:

- KeyboardEvent.KEY_DOWN - пользователь нажимает клавишу клавиатуры;

- KeyboardEvent.KEY_UP - пользователь отпускает клавишу клавиатуры.

То есть мы имеем возможность отлавливать или момент, когда пользователь нажимает клавишу, или момент, когда пользователь клавишу отпускает. Использование того или иного события будет зависеть от ваших предпочтений или от требований к разрабатываемому вами флеш-проекту.

Код ActionScript 3.0:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyboardDown); stage.addEventListener(KeyboardEvent.KEY_UP, onKeyboardUp); function onKeyboardDown(event:KeyboardEvent):void { trace("Вы нажали клавишу на клавиатуре!") } function onKeyboardUp(event:KeyboardEvent):void { trace("Вы отпустили клавишу на клавиатуре!") }

Но мало знать, что нажата какая-то клавиша на клавиатуре. Как правило, требуется узнать, какая именно клавиша нажата или отпущена пользователем. И для этого в языке ActionScript 3.0 есть целый набор полезных свойств:

- keyCode - возвращает код нажатой или отпущенной клавиши;

- charCode - возвращает значение кода символа для нажатой или отпущенной клавиши;

- ctrlKey - возвращает true, если клавиша Ctrl активна, а false возвращается, если клавиша Ctrl неактивна (это свойство будет вам полезно, если вы решите создать сочетание клавиш вида КЛАВИША + CTRL).

- shiftKey - возвращает true, если клавиша Shift активна, а false возвращается, если клавиша Shift неактивна (это свойство будет вам полезно, если вы решите создать сочетание клавиш вида КЛАВИША + SHIFT).

- keyLocation - указывает положение нажатой или отпущенной клавиши на клавиатуре (это свойство полезно, если надо различать те клавиши, которые дублируются на клавиатуре; свойство keyLocation, например, позволит вам различать между собой правую и левую клавиши Ctrl).

Таким образом, перед нами открываются широчайшие возможности по отслеживанию событий клавиатуры. При этом мы может отлавливать не только активность одиночных клавиш, но и сложные клавишные комбинации.

Код ActionScript 3.0:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyboardDown); stage.addEventListener(KeyboardEvent.KEY_UP, onKeyboardUp); function onKeyboardDown(event:KeyboardEvent):void { trace("===> Вы нажали клавишу на клавиатуре! <===") trace("Код клавиши: " + event.keyCode); trace("Значение кода символа: " + event.charCode); trace("Нажата ли клавиша Ctrl: " + event.ctrlKey); trace("Нажата ли клавиша Shift: " + event.shiftKey); trace("Расположение клавиши: " + event.keyLocation); } function onKeyboardUp(event:KeyboardEvent):void { trace("===> Вы отпустили клавишу на клавиатуре! <===") trace("Код клавиши: " + event.keyCode); trace("Значение кода символа: " + event.charCode); trace("Нажата ли клавиша Ctrl: " + event.ctrlKey); trace("Нажата ли клавиша Shift: " + event.shiftKey); trace("Расположение клавиши: " + event.keyLocation); }

А теперь давайте посмотрим, как мы можем отлавливать активность конкретной клавиши клавиатуры. Например, нам надо отследить момент нажатия пользователем клавиши ПРОБЕЛ.

Код ActionScript 3.0:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyboardDown); function onKeyboardDown(event:KeyboardEvent):void { if (event.keyCode == 32) { trace("Вы нажали ПРОБЕЛ!"); } }

Как видите, нам для этого потребовалось написать простейшее условие. Аналогичным образом можно отловить и активность прочих клавиш или сочетаний клавиш.

Но возникает небольшая трудность. Дело в том, что нам надо знать код той клавиши, активность которой мы отслеживаем. Конечно, можно воспользоваться справочником или приведённым ранее кодом для определения значений свойств KeyboardEvent. Но это не очень удобно. Гораздо удобнее для этого написать небольшую программку, которая и будет возвращать всю необходимую информацию. Например, так:

Загрузить Adobe Flash Player

Обратите внимание, что при использовании клавиатурного ввода флеш-приложение должно находится в фокусе. Для этого достаточно кликнуть курсором мышки в любом месте флеш-ролика. Если этого не сделать, то Flash Player просто не поймёт, что данные команды клавиатуры предназначены именно для него.

Для определения значения свойства keyCode для той или иной клавиши клавиатуры вы также можете воспользоваться вспомогательным AIR-приложением KeyCode от www.fmajakovskij.info (<12kb).

KeyCode

На этом всё. Скачать исходники к уроку и программу KeyCode можно здесь.

Примечания

[!] В данном уроке события клавиатуры рассматривались для ОС Windows.

[!] События клавиатуры часто не работают или работают некорректно в среде разработки. Поэтому, чтобы проверить работу с клавиатурой того или иного флеш-приложения, надо его скомпилировать и запустить в браузере или в автономном Flash Player.

Автор: admin

Дата добавления: 2012-01-08

Просмотров: 16762

Рейтинг поста: +28-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): doulammilmigo
Дата добавления: 2015-12-04
Услуги спам-прогонов по базам

Услуга: Прогон по РУ базе ( 120 000 форумов)
Цена: 5$ + предоставление отчета

Услуга: Прогон по Микс базе (150 000 форумов)
Цена: 15$ + Предоставление отчета

Услуга: Прогон по DLE сайтам (профили)+спам коментами
Цена: 15$ + Предоставление отчета

Услуга: Качественные прогоны 6 раз в месяц по РУ Микс базе
Цена: 35$ + Предоставление отчета

Результаты прогона:
1. Гарантированный прирост ссылок.
3. Тысячи переходов с форумов по ссылкам от прогона.

Условия работы
1. Работаю только по полной предоплате.
2. Оплата на Webmoney
3. По договоренности возможна оплата на другие платежные системы

Реквизиты для оплаты:
Webmoney кошелек: Z958186834482

Контакты для свзи:
Email: deprogone@yandex.ru
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-04-15
> Спасибо огромное Автор. Но вот бы ты объяснил что за класс stage

С этим вопросом лучше обратиться к оф. документации: http://goo.gl/sZzBPY
Комментатор
Комментарий добавил(а): Ариото
Дата добавления: 2015-04-15
Спасибо огромное Автор. Но вот бы ты объяснил что за класс stage
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-09-25
Если сцена, то так:
stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyboardDown ); function onKeyboardDown( event:KeyboardEvent ):void { if (event.keyCode == 32) { nextScene(); } }
Комментатор
Комментарий добавил(а): Валерий
Дата добавления: 2013-09-24
Добрый день, а что необходимо прописать, чтобы переход на следующую сцену фильма осуществлялся только при нажатии клавиши ПРОБЕЛ?
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-05-16
> как можно сделать что бы картинка перемещалась по сцене при нажатии стрелок, что бы постоянно проверялось условие нажата ли какая ни будь стрелка?

Зачем проверять условие? Можно просто с клавиш считывать направление движения по осям X и Y, а потом эти данные использовать для перемещения объекта с заданной скоростью. Что-то вроде этого:

var directionX:int = 0;
var directionY:int = 0;
var speed:uint = 1;

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownFunc);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpFunc);

function keyDownFunc(event:KeyboardEvent)
{
var kc:uint = event.keyCode;
if (kc == 37)
{
directionX = -1;
}
else if (kc == 38)
{
directionY = -1;
}
else if (kc == 39)
{
directionX = 1;
}
else if (kc == 40)
{
directionY = 1;
}
timer.start();
}

function keyUpFunc(event:KeyboardEvent)
{
timer.stop();
}

var timer:Timer = new Timer(20);
timer.addEventListener(TimerEvent.TIMER, anim);
function anim(event:TimerEvent):void
{
mc.x += directionX * speed;
mc.y += directionY * speed;
}
Комментатор
Комментарий добавил(а): Антон
Дата добавления: 2013-05-12
Доброго времени суток...как можно сделать что бы картинка перемещалась по сцене при нажатии стрелок, что бы постоянно проверялось условие нажата ли какая ни будь стрелка? А то так при нажатии на стрелку картинка дергается, а потом начинает движение, а если в свойствах клавиатуры все поставить на минимум...то всё движение будет дерганным

<code>
stage.addEventListener(KeyboardEvent.KEY_DOWN, Peredvig);

function Peredvig (e:KeyboardEvent) {

if (e.keyCode == 37)
{
Kartinka.x = Kartinka.x - 3;
}
else if (e.keyCode == 38)
{
Kartinka.y = Kartinka.y-3;
}
else if (e.keyCode == 39)
{
Kartinka.x = Kartinka.x+3;
}
else if (e.keyCode == 40)
{
Kartinka.y = Kartinka.y+3;
}
}
</code>
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-04-24
В интернетах разные решения предлагаются. Есть и пользовательские классы, решающие данную проблемку. Но, в принципе, можно и так:


var keyF:Boolean = false;
var keyK:Boolean = false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyboardDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyboardUp);

function onKeyboardDown(event:KeyboardEvent):void
{
if (event.keyCode == 70)
{
keyF = true;
}
if (event.keyCode == 75)
{
keyK = true;
}
if (keyF && keyK)
{
код, который выполняется после нажатия сочетания клавиш;
}
}
function onKeyboardUp(event:KeyboardEvent):void
{
if (event.keyCode == 70)
{
keyF = false;
}
if (event.keyCode == 75)
{
keyK = false;
}
}
Комментатор
Комментарий добавил(а): Zarkvon
Дата добавления: 2013-04-24
подскажите как запрограммировать нажатие сочетаний клавиш, например F+K?
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика