Как запрограммировать обработку нажатий на клавиши? Здесь все очень просто. Есть две основных функции: GetKeyClicked и GetKeyPressed, которые возвращают код нажатой клавиши. Разница между ними лишь в том, что первая возвращает последнюю нажатую клавишу, а вторая - клавишу, нажатую в данных момент. Разные телефоны (и устройства вообще) могут возвратить для одной и той же клавиши разные коды и тогда программа, которая прекрасно работала на одном телефоне, совершенно откажется работать на другом. Эту проблему решает функция KeyToAction, которая сама определяет, какая клавиша была нажата и выдает ее значение. Например, если был нажат джойстик вверх, то значение будет GA_UP, если вправо, то - GA_RIGHT. GA_UP и GA_RIGHT - это так называемые константы. Константа - это идентификатор, который заменяет в программе некоторое число (или другие данные). Для чего это нужно? Для того, чтобы программа стала более понятной. Например, при том же опросе клавиш: вместо того, чтобы сравнивать возвращенное значение с непонятно что означающим числом, мы сравниваем, допустим, с константой GA_RIGHT. Сразу становится понятно, что это проверка нажатия клавиши "Вправо". Благодаря константам уменьшается вероятность ошибки. Подробнее о константах читайте в Справочнике MidletPascal.
А теперь поясню все вышесказанное на практике:
while KeyToAction (GetKeyClicked) <> GA_FIRE do begin Delay(100); end; |
Этот пример был взят из помощи по Midlet Pascal. Данный цикл (а значит и программа в данном случае) будет работать до тех пор, пока не будет нажат центр джойстика и функция опроса клавиатуры не вернет значение, равное константе GA_FIRE.
А теперь я хочу показать, как все это применить на практике. Напишем небольшую заготовку игрушки. Мы будем управлять летающей тарелкой. Для этого надо добавить в проект картинку самой тарелки и фон космоса, где, собственно и будет происходить действие.
![]() NLO.png |
![]() Cosmos.png |
Далее приведу просто текст программы. Здесь полно комментариев и, я думаю, вы разберетесь здесь без проблем.
program ufo; var Cosmos:image; // Переменная для хранения фона NLO:image; // Переменная для хранения самой тарелки X,Y:integer; // Координаты тарелки Key:integer; // Код нажатой кнопки begin // Загружаем картинки Cosmos:=LoadImage('/Cosmos.png'); NLO:=LoadImage('/NLO.png'); // Задаем начальные координаты тарелки X:=50; Y:=50; // Цикл до нажатия на центр джойстика while (Key<>GA_FIRE) do begin // Выводим изображения и обязательно ставим небольшую паузу DrawImage(Cosmos,0,0); DrawImage(NLO,X,Y); Delay(100); repaint; // Обрабатываем нажатия кнопок и меняем координаты тарелки Key:=KeyToAction(getKeyPressed); if (Key=GA_LEFT) then X:=X-3; if (Key=GA_RIGHT) then X:=X+3; if (Key=GA_UP) then Y:=Y-3; if (Key=GA_DOWN) then Y:=Y+3; end; end. |
Вот как это выглядит на экране телефона:
Ну, и в заключение, добавим в игру фоновую музыку. Если не помните как, прочитайте еще раз главу "Воспроизведение музыки". Не забудьте добавить в проект файл music.mid!
program ufo; var Cosmos:image; // Переменная для хранения фона NLO:image; // Переменная для хранения самой тарелки X,Y:integer; // Координаты тарелки Key:integer; // Код нажатой кнопки begin // Включаем мелодию if not OpenPlayer('/music.mid', 'audio/midi') then Halt; // Открыть в проигрывателе звуковой файд // Если файл отсутствует, завершить программу if not SetPlayerCount(-1) then Halt; // Установить бесконечное число повторов мелодии // Если ошибка, то завершить программу if not StartPlayer then Halt; // Начать проигрывание мелодии // Если плейер не поддерживает данный формат midi, завершить программу // Загружаем картинки Cosmos:=LoadImage('/Cosmos.png'); NLO:=LoadImage('/NLO.png'); // Задаем начальные координаты тарелки X:=50; Y:=50; // Цикл до нажатия на центр джойстика while (Key<>GA_FIRE) do begin // Выводим изображения и обязательно ставим небольшую паузу DrawImage(Cosmos,0,0); DrawImage(NLO,X,Y); Delay(100); repaint; // Обрабатываем нажатия кнопок и меняем координаты тарелки Key:=KeyToAction(getKeyPressed); if (Key=GA_LEFT) then X:=X-3; if (Key=GA_RIGHT) then X:=X+3; if (Key=GA_UP) then Y:=Y-3; if (Key=GA_DOWN) then Y:=Y+3; end; end. |
К содержанию
|
|
![]() |
Скачать новую версию данного учебника в одном архиве
Курс находится в процессе разработки, поэтому архив постоянно обновляется! |