Пример использования lib_keys (отслеживание одновременного нажатия кнопок)
Как вам, возможно, известно, MidletPascal не поддерживает одновременного определения нескольких нажатий кнопок. То есть, вы не можете поймать одновременно нажатые кнопки Вверх + Вправо, или Выбор + Вниз (к примеру). Это явно сужает диапазон игр, которые можно реализовать на MP (как факт, сразу выпадают платформеры и практически все динамические игры). Но есть очень милая библиотека Lib_keys, позволяющая получить целочисленную (точнее сказать, набор битов), определяющую текущее состояние кнопок. Эта тема посвящена работе с данной библиотекой.
УстановкаДля того чтобы использовать Lib_keys, нужно проделать несколько простых шагов: 1. Скачать Lib_keys (ссылка в предыдущем параграфе), и скопировать содержимое zip-папки в под-папку Libs в основной папке MidletPascal. 2. Для проэкта, которому предстоит использовать данную библиотеку, выставить тип MIDlet'а на MIDP2.0 Fullscreen. Это делается следующим образом: Для MP 2.*, в Properties\Build configurations изменить MIDlet type для всех активных конфигураций.3. Добавить "keys" в список используемых библиотек (uses). Обычно это вторая строка программы. Если таковой нет, просто добавьте PHP код:
КонстантыОсновная тема библиотеки предлагает нам использовать набор констант из Lib_game, то есть: Переменная » КнопкиВ данном случае, лучшим вариантом будет использовать AND (И) для битового сравнения переменных. Работает это следующим образом: 5 and 4 = 1, поскольку 5 = 4 + 1, 4 есть в обоих числах, 1 есть лишь в одном числе. 6 and 9 = 0, поскольку 6 = 4 + 2, 9 = 8 + 1, совпадений нет. То есть, чтобы проверить, есть ли константа кнопки в полученной переменной состояний, нам нужно проделать следующее: PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
У нас теперь есть игра с мячиком, который можно передвигать по экрану, оборачивать вокруг краев экрана и даже телепортировать! Нажата, зажата, отпущена - определение состояний кнопок по одной переменнойКазалось бы, как можно отловить событие нажатия или отпускания кнопки, если мы знаем лишь то, нажата ли она на данный момент? Но это можно, и более того, несложно сделать. Логика для данного алгоритма выглядит следующим образом: PHP код:
PHP код:
Если есть вопросы, задавайте. Удачного создания игр :-D |
Ответ: Пример использования lib_keys (отслеживание одновременного нажатия кнопок)
Хорошие примеры, полезные, так держать!
Подобные статьи рекомендую размещать в разделе Наше Open Source Software, предназначенном специально для подобных статей. Завтра эту тему и тему про ввод тоже туда перенесу. |
Ответ: Пример использования lib_keys (отслеживание одновременного нажатия кнопок)
Спасибо за пример!
Вопрос: Можно ли сделать либу, которая возврвщает событие KeyUP в виде кода кнопки (мне кажется так проще проверять одновременное нажатие кнопок) и сделать проверку кнопок примерно так uses (к примеру)keyup; var up,down,left,right:boolean; pressed:integer; begin pressed:=keytoaction(Getkeypressed); if pressed=ga_UP then up:=true; if pressed=ga_DOWN then down:=true; if pressed=ga_LEFT then left:=true; if pressed=ga_RIGHT then right:=true; pressed:=keyup.keyup; if pressed=ga_UP then up:=false; if pressed=ga_DOWN then down:=false; if pressed=ga_LEFT then left:=false; if pressed=ga_RIGHT then right:=false; if up then begin y:=y-1; ... end; if down then begin y:=y+1; ... end; .. .. .. И.Т.Д end; |
Ответ: Пример использования lib_keys (отслеживание одновременного нажатия кнопок)
Вложений: 1
Цитата:
На самом деле это вызывает одну проблему - если пользователь нажимает или отпускает две кнопки за раз, то ловится одна. Поэтому кроме этого я добавил простую систему - GetKeyNum возращает количество нажатых в этот момент кнопок, GetKey(index) возращает индекс нажатой кнопки (index в диапазоне 1..GetKeyNum). Библиотека не совместима с аналогичными ей (насколько я знаю, из таковых только Lib_sensor, и одна моего авторства... но я ее еще не выложил), поскольку перезаписываются события основного модуля. Все функции: Код:
KeyStart - инициализирует библиотеку. Желательно вставить в самое начало программы. PHP код:
|
Ответ: Пример использования lib_keys (отслеживание одновременного нажатия кнопок)
Спасибо!!
Отличная либа, как раз то что было нужно!! |
Ответ: Пример использования lib_keys (отслеживание одновременного нажатия кнопок)
а как же getkeyclicked в ukey?
|
Ответ: Пример использования lib_keys (отслеживание одновременного нажатия кнопок)
Цитата:
Если нужен эффект "пока не нажмут любую клавишу", это достигается условием рода Код:
if (get_key_states <> 0) then |
Ответ: Пример использования lib_keys (отслеживание одновременного нажатия кнопок)
Цитата:
Цитата:
|
Часовой пояс GMT +4, время: 21:39. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot