Стоп SlimDX Raw Клавиатура ввода "дрожит"

Когда вы удерживаете клавишу в текстовом редакторе, появляется символ, затем вы получаете небольшую паузу, прежде чем появляется поток символов. Это система, которая компенсирует некоторых людей, удерживающих клавишу дольше, чем другие / думающих и т. Д.

Моя проблема в том, что это происходит, когда я удерживаю клавишу перемещения в своем приложении SlimDX Direct3D11. Вместо перемещения камеры она перемещается на 1 единицу, делает паузу, а затем движется плавно.

Я использую следующий код для захвата данных клавиатуры:

private void InitializeKeyboard()
{
    INPUT.Device.RegisterDevice(SlimDX.Multimedia.UsagePage.Generic, SlimDX.Multimedia.UsageId.Keyboard, INPUT.DeviceFlags.None);
    INPUT.Device.KeyboardInput += new EventHandler<KeyboardInputEventArgs>(KeyboardInput);
}

void KeyboardInput(object sender, KeyboardInputEventArgs e)
{
    if (e.Key == Keys.W) camera.MoveForward(0.3f);
    if (e.Key == Keys.S) camera.MoveForward(-0.3f);
}

Я использую аналогичную систему для захвата мыши, и движение мыши работает плавно и отзывчиво, поэтому проблема должна заключаться в этой автоматической коррекции, которую выполняет клавиатура для предотвращения двойного нажатия. Кто-нибудь знает, как остановить аппаратное обеспечение от этого? Или вы должны по-разному перехватывать ввод в DirectX 11?

1 ответ

Решение

Это умышленно, у вас есть SystemInformation.KeyboardDelay и KeyboardSpeed. Задержка - это число 250 мсек, которое она будет ожидать, пока ключ не начнет повторяться. Обычно это больше, чем скорость, задержка между повторными нажатиями клавиш.

Используйте только сообщения keydown и keyup. Получить повторение от таймера или естественным образом, как работает ваш игровой цикл. Это также поддерживает нажатие нескольких клавиш, что-то еще, что не работает в вашем текущем подходе.

Другие вопросы по тегам