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);
}
しかし、メソッドIsKeyPushedDownは、関数を呼び出す瞬間にキーが押されたかどうかを検出します。そのため、キーが押されているかどうかをテストするためのループが必要です。問題は、それでもすべてのキーストロークをキャッチできないことです-ループが遅すぎると思います。
2番目の選択肢は、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);
}
}
これは本当にうまく機能しますが、繰り返しの遅延の影響を受けるため、ゲーム内のモンスターの動きは次のようになります。
私の問題の解決策はありますか?ありがとう
編集:私は両方の手順を組み合わせることで問題を解決しました。しかし、それは非常に醜い解決策です。私はまだより良い解決策があることを願っています。