|
#1
|
|||
|
|||
Клавиши
Создаю игру, как можно отловить нажать двух клавиш: к примеру стрлки вверх и влево (vk_up и vk_vk_left)? К примеру в процедуре FormKeyDown это возможно?
|
#2
|
|||
|
|||
Возможно, но сложно. Надо понимать, что иллюзия нажатия одновременно двух клавиш и есть иллюзия. На самом деле приходят два последовательных события, сначала от одной, затем от другой клавиши.
Поэтому надо извращаться. Отловить нажатие одной клавиши в событии OnKeyDown и запомнить это обстоятельство в каком-нибудь булевском флаге. В событии OnKeyUp отслеживать, а не отпущена ли эта клавиша (если отпущена - флаг сбрасывать). Затем отлавливать нажатие другой клавиши в OnKeyDown и смотреть флаг нажатия первой клавиши. Если флаг первой клавиши не сброшен, то первая клавиша нажата и, таким образом нажаты обе клавиши. По этому условию что-то делать. Если это происходит на форме, то свойство KeyPreview должно быть установлено в True; |
#3
|
|||
|
|||
А ты не пробовал это сделать с помощью хуков?
|
#4
|
|||
|
|||
Спасибо за идейки, щас попробуем =)
|
#5
|
|||
|
|||
создаёшь булевый массив для интересующих тебя клавиш, что будет хранить инфу нажата клавиша или нет. потом пишешь стандартную процедуру перехвата сообщений нажатия клавиш примеров тьма. там в аргументе есть код нажатой клавиши, по нему меняешь значения массива.
|
#6
|
|||
|
|||
Есть еще одна проблемка по обработке клавиш в процедуре onkeydown если зажимать клавишу, то компонент timer работает не корректно... т.е. невыполняет заданное условие через определенный промежуток (пропускает некоторые циклы) времени, если зажата клавиша.
|
#7
|
|||
|
|||
TTimer не точный счетчик потому что VCL :-).
Для точного измерения лучше использовать WinAPI: SetTimer - KillTimer. |
#8
|
|||
|
|||
Цитата:
|