ジョイスティックのボタンを押すたびに、またはジョイスティックの軸を動かすたびに、ジョイスティックの状態を更新したいと思います。私はすでにこのコードを持っています:ジョイスティックの状態を更新するには
Imports Microsoft.DirectX
Imports Microsoft.DirectX.DirectInput
Dim js As Device = Nothing
For Each DI As DeviceInstance In Manager.GetDevices(DeviceClass.GameControl, _
EnumDevicesFlags.AttachedOnly)
js = New Device(DI.InstanceGuid)
Exit For
Next
If js Is Nothing Then
Throw New Exception("No joystick found")
End If
Dim wih As New System.Windows.Interop.WindowInteropHelper(Me)
js.SetCooperativeLevel(wih.Handle, CooperativeLevelFlags.NonExclusive Or _
CooperativeLevelFlags.Background)
js.Acquire()
Dim state As JoystickState = js.CurrentJoystickState
最後の行はジョイスティックの状態を取得します。私はタイマーが使用されていることを見て、それが状態がリフレッシュされるたびに刻むが、私はボタンを押しても状態が更新されるので効率的ではないようだ。ですから、必要な時にだけどのように状態をリフレッシュするのですか?
重要ですか?私は、フレームレートに合わせるために、1秒に50〜100回のオーダーと仮定します。あなたは高価な操作をアップデートに付けるつもりはないので、何が問題なのですか? OSにはジョイスティックの変更通知メカニズムがないため、どこかのコードをポーリングする必要があります。 – Rup
@Rupディスパッチャータイマーを使用している場合、どのくらい時間が必要ですか? – Cobold
...オハイオ州、私は見る - 私の誤解、申し訳ありません。私は「DXによってタイマーが提供されているので、他の人がタイマーを使うのを見たことがない」というより良い解決策が必要だと読んでいます。あなたが実際にポーリングする必要がある場合 - DirectInputデバイスのための '登録イベントの通知'がない場合は、ゲームプロセスが入力を処理する頻度で実行してください。これはvsyncまたはバックグラウンドのワールドアップデートスレッド私は推測する? – Rup