Обработка событий клавиатуры

Обработка событий клавиатуры в апплете работает очень схоже с обработкой событий мыши, как я сказал в предыдущей главе. Есть один специальный метод для каждого возможного события (коавиша нажата либо не нажата). Вы должны переписывать соответствующий метод, если хотите, к примеру, обрабатывать событие нажатой клавиши. В этой главе мы коротко рассмотрим два метода. Впоследствии мы поменяем апплет с движущимся шаром таким образом, что направление шара будет меняться нажатием клавиш "стрелка влево" и "стрелка вправо", и останавливаться при нажтии клавиши "пробел". Будьте внимательны: события будут обрабатываться только тогда, когда вы кликните по окну апплета!

1. public boolean keyDown (Event e, int key): этот метод отслеживает события нажатой клавиши

У каждой клавиши есть значение (ASCII). Это значение метод получает с помощью переменной "key". Пробел имеет значение 32. Если вы хотите, чтобы апплет улавливал нажатие клавиши "Пробел", просто проверьте, равно значение "key" 32 (детали позже). Если вы не знаете значения какой-либо клавиши, то можете вывести его в стандартное окно вывода (output), написав эту строчку в методе keyDown(...):

System.out.println ("Character: " + (char)key + " Integer Value: " + key);

Некоторые особо популярные клавиши имеют специальные переменные. Например, клавиши-стрелки - Event.LEFT, Event.RIGHT, Event.UP, Event.DOWN. Эти значения field variables в классе Event. Чтобы узнать другие переменные, читайте API!

2. public boolean keyUp (Event e, int key): этот метод реагирует на события отпущенной клавиши. Этот метод используется точно так же, как и метод keyDown.

Теперь слегка модифицируем наш апплет. Пользователь сможет менять направление шара нажатием клавиш "правая стрелка" и "левая стрелка". Если будет нажата клавиша "пробел", шар остановится. Чтобы реализовать это, добавьте в наш апплет следующие строки:

// метод обработки событий нажатых клавиш
public boolean keyDown (Event e, int key)
{

    // пользователь нажимает кнопку "стрелка влево"
    if (key == Event.LEFT)
    {
      // изменение x - speed, чтобы шар двигался влево (x_speed имеет отрицательное значение)
      x_speed = -1;
    }
    // пользователь нажимает кнопку "стрелка вправо"
    else if (key == Event.RIGHT)
    {
      // изменение x - speed, чтобы шар двигался вправо (x_speed имеет положительное значение)
      x_speed = 1;
    }
    // пользователь нажимает клавишу "пробел" (значение = 32!)
    else if (key == 32)
    {
      // остановка шара (x_speed = 0)
      x_speed = 0;
    }
    else
    {
      /* Дополительно метод выводит ASCII-значение, если нажата другая клавиша. Это не является необходимым, но дает вам возможность проверить, какое значение имеет клавиша. */
      System.out.println ("Charakter: " + (char)key + " Integer Value: " + key);
    }

    // НЕ ЗАБЫВАТЬ (хотя в данном случае роли не играет)
    return true;
}

Что ж, теперь вы вполне можете создать все основные вещи, используемые в игре. Вы можете двигать объекты, обрабатывать события и загружать звуки и изображения. В следующей главе мы будем программировать нашу первую полную игру (которая была первой игрой, которую я создал на Java). Чтобы усвоить следующую главу, вы должны иметь представление о классах, объектах, вызовах методов других классов... И, кончно же, вы должны знать все вещи, о которых я толковал в предыдущих главах. Программируя эту игру, я покажу вам некоторые новые техники (как "ударить" мяч, изменить курсор мыши, задать шару случайное направление...), а после программирования игры вы сможете создавать свои собственные. ОК, встретимся в следующей главе, а сейчас можете посмотреть на апплет, который мы программировали в этой главе и скачать исходник.

Скачать исходный код апплета
Запустить апплет

Следующая глава:
Обработка событий с использованием нового Java API

Fabian Birzele, 2001-2003.
перевод и веб-дизайн: В.Мурзагалин, 2004.