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.

questionAnswers(1)

yourAnswerToTheQuestion