0

テキストエディタでキーを押したままにすると、文字が表示され、文字のストリームが表示される前に少し休止します。これは、キーを他の人より長く押し続けたり、思考を一時停止したりする人を補うシステムです。

私の問題は、SlimDXDirect3D11アプリケーションで移動キーを押したときにこれが発生することです。カメラを動かす代わりに、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で入力を別の方法でトラップすることになっている場合はどうなりますか?

4

1 に答える 1

2

これは仕様によるもので、SystemInformation.KeyboardDelay と KeyboardSpeed があります。遅延は、キーの繰り返しが開始されるまで待機する 250 ミリ秒の数です。これは、通常、キー ストロークを繰り返す間の遅延である速度よりも長くなります。

keydown および keyup メッセージのみを使用します。タイマーまたはゲーム ループが機能する自然な方法から繰り返しを取得します。これは、複数のキーを押すこともサポートしています。これは、現在のアプローチでは機能しないものです。

于 2011-02-21T21:29:37.207 に答える