Показать сообщение отдельно
Старый 26.03.2011, 00:12   #4
YellowAfterlife
ПроЭктировщик
 
Аватар для YellowAfterlife
 
Регистрация: 19.02.2011
Сообщений: 134
Написано 81 полезных сообщений
(для 219 пользователей)
Ответ: Пример использования lib_keys (отслеживание одновременного нажатия кнопок)

Сообщение от 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
  
tiinteger;
  
sstring;
function 
DrawTextBy(sstringxyinteger): integer;
begin
  DrawText
(sxy);
  
DrawTextBy := GetStringHeight(s);
end;
begin
  KeyStart
;
  
Debug('Start.');
  
repeat
    SetColor
(240240240);
    
FillRect(00GetWidthGetHeight);
    
SetColor(808080);
    
:= GetStringHeight('World.');
    
DrawText('Max keys: ' GetKeyLen00);
    
:= '';
    for 
:= 1 to GetKeyNum do := GetKey(i) + ';';
    
DrawText('Now keys: ' GetKeyNum0t);
    
DrawText('Key indexes: ' s02);
    
:= '';
    for 
:= 1 to GetKeyNum do := KeyToAction(GetKey(i)) + ';';
    
DrawText('Game indexes: ' s03);
    
RePaint;
  
forever;
end
Вложения
Тип файла: zip Lib_ukey.zip (1,018 байт, 1024 просмотров)
__________________

Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо YellowAfterlife за это полезное сообщение:
DIMMON4IK (05.07.2011), LTS (26.03.2011), RblSb (01.09.2013)