Как я могу избавиться от задержки повторения символов в C #?
http://www.microsoft.com/windowsxp/using/accessibility/characterrepeatrate.mspx - В Windows есть опция для настройки задержки повтора. Это означает задержку между первым нажатием клавиши и другими, если вы продолжаете нажимать клавишу. Я создаю какую-то игру, и мне нужно избавиться от этой "функции".
Пока мне удалось найти этот метод:
[DllImport("user32.dll")]
static extern ushort GetAsyncKeyState(int vKey);
public static bool IsKeyPushedDown(Keys keyData)
{
return 0 != (GetAsyncKeyState((int)keyData) & 0x8000);
}
Но метод IsKeyPressedDown выясняет, нажата ли клавиша в момент вызова функции, поэтому мне нужен цикл, чтобы проверить, нажата ли клавиша. Проблема в том, что он все еще не улавливает все нажатия клавиш - я думаю, что у меня слишком медленный цикл.
Второй вариант - переопределение ProcessCmdKey:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// processing keys
if (keyData == Keys.Left || keyData == Keys.Right || keyData == Keys.Up || keyData == Keys.Down)
{
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
это работает действительно хорошо, но на это влияет задержка повторения, и поэтому движение моего монстра в моей игре выглядит следующим образом:
Есть ли решение для моей проблемы? Спасибо
РЕДАКТИРОВАТЬ: я решил проблему, объединив обе процедуры. Но это очень уродливое решение. Я все еще надеюсь, что есть лучшее решение.