Yogrik писал(а):А таймер имеется в виду TTimer???
Именно TTimer... Есть альтернативы?
SAK писал(а):PS. Или частота автоповтора задаёт скорость игры? Но для этого всё же таймер лучше.
Движок не игровой, поэтому понятия скорости нет. И таймера пока не нужно, только вот ради обработки нажатий и сделал таймер.
SAK писал(а):Событие OnKeyDown фиксируется только для нажатия клавиши автоповторы отбрасываются.
В случае однократных нажатий использовал автоповторы и все работало нормально. А при использования многократных нажатий, автоповтор работает только для последней нажатой клавиши и если она отпускается, то автоповторы прекращаются.
haword писал(а):Я пробывал, после отпускания любой клавиши идет ОнКейАп с кодом! Для этого и счетчик чтобы знать количество одновременно нажатых клавишь.
ОнКейАпом никаких проблем небыло и нет.
Мне не нужно знать сколько клавиш нажато, мне нужно знать только какие. Для этого я использую TKeyState = set of byte;
при OnKeyDown: KeyState := KeyState + [Key]
при OnKeyUp: KeyState := KeyState - [Key]
В таймере просто проверка:
if VK_W in KeyState then shift_camera_forward(step_len);
и т.п.
haword писал(а):И странно таймер под виндой кажись до 1 милисекунды может срабатывать, этого чтоли не хватает времени?
Задать кончено можно до 1мс, но не факт что события будут идти с такой скростью.
На новых тачках может быть, а вот на мой с пустым таймером где-то до 30мс можно отсчитывать, точно не помню раньше замерял, а тут еще нужно сцену рендерить.
В общем
все работает как я и писал в первом сообщении. Я просто думал, что можно как-то обойтись без таймера..
Впрочем ладно, многократные нажатия работают.
А дискретизация/сглаживание движений это другая тема..
PS: Просто интересно (но в данной ситуации бесполезно), можно ли в Lazarus определить нажата некоторая клавиша или нет - без обработки OnKeyDown/OnKeyUp? и не используя платформно зависимые юниты типа windows.