Сообщение от LTS
Спасибо за пример!
Вопрос: Можно ли сделать либу, которая возврвщает событие KeyUP в виде кода кнопки (мне кажется так проще проверять одновременное нажатие кнопок)
|
Можно. Вложение.
На самом деле это вызывает одну проблему - если пользователь нажимает или отпускает две кнопки за раз, то ловится одна.
Поэтому кроме этого я добавил простую систему - GetKeyNum возращает количество нажатых в этот момент кнопок, GetKey(index) возращает индекс нажатой кнопки (index в диапазоне 1..GetKeyNum).
Библиотека не совместима с аналогичными ей (насколько я знаю, из таковых только Lib_sensor, и одна моего авторства... но я ее еще не выложил), поскольку перезаписываются события основного модуля.
Все функции:
KeyStart - инициализирует библиотеку. Желательно вставить в самое начало программы.
GetKeyLen:integer - возращает максимальное замеченное количество нажатых за раз кнопок. Оставлена в ознакомительных целях.
GetKeyNum:integer - возращает количество нажатых в данный момент кнопок.
GetKey(n:integer):integer - возращает n-ую нажатую кнопку. Если n < 1, возращается первая кнопка. Если n > GetKeyNum, возращается 0.
GetKeyPressed:integer - возращает последнюю нажатую кнопку, аналогично GetKeyClicked.
GetKeyReleased:integer - возращает последнюю отпущенную кнопку.
Пример кода:
program SampleProject;
uses ukey;
var
t, i: integer;
s: string;
function DrawTextBy(s: string; x, y: integer): integer;
begin
DrawText(s, x, y);
DrawTextBy := y + GetStringHeight(s);
end;
begin
KeyStart;
Debug('Start.');
repeat
SetColor(240, 240, 240);
FillRect(0, 0, GetWidth, GetHeight);
SetColor(80, 80, 80);
t := GetStringHeight('World.');
DrawText('Max keys: ' + GetKeyLen, 0, 0);
s := '';
for i := 1 to GetKeyNum do s := s + GetKey(i) + ';';
DrawText('Now keys: ' + GetKeyNum, 0, t);
DrawText('Key indexes: ' + s, 0, t * 2);
s := '';
for i := 1 to GetKeyNum do s := s + KeyToAction(GetKey(i)) + ';';
DrawText('Game indexes: ' + s, 0, t * 3);
RePaint;
forever;
end.
__________________
Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...