Я вроде как писал маленький игровой движок - чтобы понять, как эти работы изнутри. В настоящее время я не хочу связываться с OpenGL или DirectX, поэтому я придерживаюсь рисования на элементе управления с помощью GDI + и всего этого материала WinForms.Длинная задержка между двумя последовательными событиями KeyDown
Очевидно, что мне нужно обрабатывать ввод. Более конкретно, события клавиатуры. Это, однако, ставит проблему:
protected override void OnKeyDown(KeyEventArgs e)
{
Trace.WriteLine(string.Format("KD {0:hh:MM:ss.fff} {1}",
DateTime.Now, e.KeyCode));
}
Этот код (даже с самой короткой задержкой повторного набора в апплете клавиатуры в панели управления) yeilds следующее:
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 (или что-то вроде kosher way nowadays?)?
Это не так, как быстро этот вопрос возник в результатах поиска Google. –