0

私は2つのラベルが付いたフォームを持っています。最初のラベルにはUSBゲームパッドの名前が表示されます(見つかったら)。2番目に押されたボタンを表示します。

 Imports Microsoft.DirectX.DirectInput

Public Class Form1
Public _device As Device
Public _state As JoystickState
Public arm As Boolean = True


Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim gameControllerList As DeviceList
    gameControllerList = Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)

    If (gameControllerList.Count > 0) Then

        Dim deviceInstance As DeviceInstance
        label.Text = "Found"
        For Each deviceInstance In gameControllerList
            _device = New Device(deviceInstance.InstanceGuid)
            label.Text = deviceInstance.InstanceName
            _device.SetDataFormat(DeviceDataFormat.Joystick)
            Exit For
        Next
    Else
        label.Text = "not found"
    End If
    output.Clear()
    _device.Acquire()

    Call Poll()
End Sub


Public Sub Poll()
    Dim buttons() As Byte
    Dim i As Integer = 0
    _device.Poll()
    _state = _device.CurrentJoystickState
    buttons = _state.GetButtons()
    Dim word As String
    word = BitConverter.ToString(buttons)
    output.AppendText(word)

End Sub

クラス終了

出力に 0 しか表示されません。これは、キーパッドで押されているボタンが検出されていないことを意味します。

この問題を解決する方法を知っている人はいますか?

4

1 に答える 1

2

面白いことに、エラーが示すとおりです。ポーリングを開始する前に、デバイスを取得する必要があります。

_device.Acquire();

これは、実際のポーリング関数の前に一度だけ発生することに注意してください。

于 2011-07-26T14:40:09.923 に答える