Jak mogę pozbyć się opóźnienia powtarzania znaków w C #?
http://www.microsoft.com/windowsxp/using/accessibility/characterrepeatrate.mspx - W systemie Windows istnieje opcja ustawiania opóźnienia powtarzania. Oznacza to opóźnienie między pierwszym naciśnięciem klawisza a pozostałymi naciśnięciami klawisza. Tworzę rodzaj gry i muszę pozbyć się tej „funkcji”.
Do tej pory udało mi się znaleźć tę metodę:
[DllImport("user32.dll")]
static extern ushort GetAsyncKeyState(int vKey);
public static bool IsKeyPushedDown(Keys keyData)
{
return 0 != (GetAsyncKeyState((int)keyData) & 0x8000);
}
Ale metoda IsKeyPushedDown dowiaduje się, czy klawisz jest wciśnięty W CZASIE wywoływania funkcji - więc potrzebuję pętli, aby sprawdzić, czy klawisz jest wyłączony. Problem polega na tym, że nadal nie przechwytuje wszystkich naciśnięć klawiszy - myślę, że mam zbyt wolną pętlę.
Drugi wybór to nadpisanie 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);
}
}
działa to naprawdę dobrze, ale ma wpływ na powtarzające się opóźnienie, dlatego ruch mojego potwora w mojej grze wygląda następująco:
Czy istnieje rozwiązanie mojego problemu? Dzięki
EDIT: Rozwiązałem problem, łącząc obie procedury. Ale to bardzo brzydkie rozwiązanie. Nadal mam nadzieję, że jest lepsze rozwiązanie.