Я пишу небольшой игровой движок - просто чтобы понять, как они работают изнутри. В настоящее время я не хочу связываться с OpenGL или DirectX, поэтому я продолжаю рисовать элемент управления с помощью GDI + и всего такого, что связано с WinForms.
Очевидно, мне нужно обрабатывать ввод. Точнее, клавиатурные события. Это, однако, создает проблему:
protected override void OnKeyDown(KeyEventArgs e)
{
Trace.WriteLine(string.Format("KD {0:hh:MM:ss.fff} {1}",
DateTime.Now, e.KeyCode));
}
Этот код (даже с самой короткой задержкой повторения, установленной в апплете «Клавиатура» на панели управления), дает следующее:
KD 10:02:18.318 Right
KD 10:02:18.570 Right
KD 10:02:18.598 Right
KD 10:02:18.639 Right
KD 10:02:18.667 Right
KD 10:02:18.701 Right
Как видите, 0,25 сек. задержка между первыми двумя событиями. Это приводит к вялым движениям объектов на экране, очевидно: сначала он немного смещается вправо, затем останавливается на заметный момент и затем продолжается.
Как мне решить эту проблему? Может ли это быть сделано в чистых WinForms или я должен пойти DirectInput (или какой-либо кошерный путь в настоящее время?) Маршрут?