Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Web-дизайн 1 часть / Литература / ActionScript 2.0. Программирование во Flash MX 2004.pdf
Скачиваний:
354
Добавлен:
26.03.2015
Размер:
8.81 Mб
Скачать

 

 

 

Таблица 12.1 Продолжение

Имя свойства

Хранимый код

Имя свойства

 

Хранимый код

 

END

35

SHIFT

 

16

 

ENTER

13

SPACE

 

32

 

ESCAPE

27

TAB

 

9

 

HOME

36

UP

 

38

 

В качестве примера использования свойств объекта Key приведем код, закрывающий окно плейера при нажатии клавиши <Esc>:

fscommand("trapallkeys", "true"); // Без этой строчки сообщения

// о нажатии <Esc> фильм получать не будет

Key.addListener(this); this.onKeyDown = functiont):Void {

if (Key.getCode() == Key.ESCAPE) { fscommand("quit");

}

};

12.3.4. Определение кода введенного символа. Метод getAscii()

Иногда необходимо знать, не какая клавиша была нажата, а какой символ она ввела. Для решения этой задачи метод getCode() не всегда эффективен. Так, одна и та же клавиша может вводить до 4 различных символов, поэтому по одному лишь ее виртуальному коду невозможно однозначно определить, какой символ был добавлен. Чтобы справиться с этой проблемой, нужно использовать метод getAscii() объекта Key:

// При введении латинской 'А' в Output будет выведено сообщение

Key. addListener(this); this.onKeyDown = function():Void {

if (Key.getAscii() == "A".charCodeAt(0)) {

}

};

Метод getAscii() возвращает позицию введенного символа в используемой операционной системой кодовой странице. Это означает, что само название метода не совсем точно. ASCII — это семибитовая кодировка (в ней 128 символов), включающая латинские буквы обоих регистров, цифры, знаки препинания, символы операторов, служебные символы. Однако в чистом виде ASCII в настоящее время практически не используется. Ввиду возросших потребностей применяются восьмибитовые кодировки. Они способны описывать 256 символов, поэтому в них могут входить национальные алфавиты, символы псевдографики и специальные знаки. Первые 128 символов восьмибитовых кодировок обычно совпадают с ASCII. Поэтому если вводятся только буквы латинского алфавита или цифры, то метод getAscii() действительно будет возвращать для них те же колы, что соответствуют им в ASCII. Однако если вы добавите кирилличный символ, то его код будет превышать 128. Естественно, что говорить в этом случае о ASCII-коде не совсем правильно. Очевидно, что название методу getAscii() было дано в расчете на американских разработчиков, на клавиатуре которых нет символов, код которых превышал бы 128 (а также исходя из традиции, по которой все производные от ASCII кодировки называются ее именем).

В отличие от метода getCode(), getAscii() способен регистрировать нажатие лишь клавиш символов. Если же была задействована служебная кнопка или ни одна клавиша нажата не была, он возвращает 0.

Используя getAscii(), можно определять не только то, какую букву — латинскую или русскую — ввела клавиша. Так как буквы в разном регистре — это различные символы, то возвращаемое getAscii() значение зависит от того, «большая» или «маленькая» буква была добавлена.

Для метода getAscii() не имеет значения, какая кнопка ввела символ. Важно лишь то, что это за

символ. Поэтому, например, не важно, при помощи какой клавиатуры — числовой или основной

— была добавлена цифра: возвращенный getAscii() код будет одним и тем же.

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

Чтобы «отловить» введение определенного символа, нужно при возникновении события onKeyDown сравнить значение, возвращенное методом getAscii(), с кодом этого символа. Но как узнать данный код? Если символ является латинской буквой, цифрой или знаком, то можно воспользоваться методом charCodeAt() класса String, как показано в приведенном выше примере. Однако подобным образом узнать код кирилличной буквы невозможно, так как при этом будет определена ее позиция в Unicode, а не в используемой операционной системой кодовой странице. В этом случае воспользуйтесь следующим тестером:

Key.addListener(this);

this.onKeyDown = function():Void { // Введя символ, вы получите его коп trace(Key.getAscii());

};

12.3.5. Проверка нажатия клавиши. Метод isDown()

Метод isDown() позволяет проверить, нажата ли определенная кнопка. В качестве параметра он принимает виртуальный код клавиши. Возвращается методом isDown() булева величина: true — клавиша нажата, false — она отпущена. Например:

this.onEnterFrame = function():Void {

//При удерживании <Enter> в Output с каждым новым кадром будет отправляться

//сообщение

if (Key.isDown(Key.ENTER)) {

trace("Ввод нажат!");

}

};

На первый взгляд, метод isDown() может показаться избыточным. Например, зачем проверять с его помощью факт нажатия кнопки, если существуют методы getCode() и getAscii(). Действительно, метод isDown() применяется не очень часто. Однако у него есть уникальные особенности, позволяющие решать задачи, с которыми невозможно справиться, используя getCode() или gctAscii().

Наиболее значительное преимущество метода isDown() заключается в том, что он способен регистрировать одновременное нажатие нескольких клавиш. А это чрезвычайно важная возможность для разработки игр. Например, если управление движением персонажа осуществляется при помощи клавиш со стрелками, то одновременное нажатие кнопки перемещения по вертикали и кнопки сдвига в сторону должно приводить к смещению по диагонали. Создать реализующий эту особенность код, используя метод isDown(), чрезвычайно просто.

Например:

// Создайте клип в виде небольшого кружка и назовите его ball this.onEnterFrame = function():Void {

if (Key.isDown(Key.LEFT)) {

// Смещение влево

ball._x -= 3;

 

}

// Смещение вправо

if (Key.isDown(Key.RIGHT)) {

ball._x += 3;

 

}

// Смещение вверх

if (Key.isDown(Key.UP)) {

ball._y -= 3;

 

}

 

Соседние файлы в папке Литература