前提・実現したいこと
VB.NETとDirectX SDKを利用してJoyPadの入力回数を正しく取得したいと思っています。
以下のコードで入力情報の取得はできたのですが、カウントがうまくいきません。
Bボタンが押された際の処理にTextBoxへ回数を加算するようにしているのですが、
一度の押下で2回カウントされたり4回カウントされたり、とても不安定です。
これをきちんと押した回数分、TextBoxに表示させるには、どのようにしたらよいでしょうか。
該当のソースコード
Imports Microsoft.DirectX Imports Microsoft.DirectX.DirectInput Public Class Form1 Private m_JoysTick As Device = Nothing Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'ゲームパッド検索 For Each wDeviceInstance As DeviceInstance In Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly) Me.m_JoysTick = New Device(wDeviceInstance.InstanceGuid) Exit For Next wDeviceInstance If Me.m_JoysTick Is Nothing Then MessageBox.Show("No JoyStick Found!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) Me.Close() Else '入力値範囲設定 For Each wObjects As DeviceObjectInstance In Me.m_JoysTick.Objects If (wObjects.ObjectId And DeviceObjectTypeFlags.Axis) <> 0 Then Me.m_JoysTick.Properties.SetRange(ParameterHow.ById _ , wObjects.ObjectId, New InputRange(-5000, 5000)) End If Next wObjects '絶対位置取得 Me.m_JoysTick.Properties.AxisModeAbsolute = True '協調レベル Me.m_JoysTick.SetCooperativeLevel(Me, CooperativeLevelFlags.NonExclusive _ Or CooperativeLevelFlags.Background) '情報取得 Me.m_JoysTick.Acquire() 'タイマー開始 Me.Timer1.Interval = 100 Me.Timer1.Enabled = True End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick With Me.m_JoysTick.CurrentJoystickState '十字ボタン(ハットスイッチ) Me.CheckBox_Up.Checked = (.GetPointOfView(0) = 0) Me.CheckBox_Right.Checked = (.GetPointOfView(0) = 9000) Me.CheckBox_Down.Checked = (.GetPointOfView(0) = 18000) Me.CheckBox_Left.Checked = (.GetPointOfView(0) = 27000) '右側ボタン Me.CheckBox_X.Checked = (.GetButtons(0) > 0) Me.CheckBox_A.Checked = (.GetButtons(1) > 0) Me.CheckBox_B.Checked = (.GetButtons(2) > 0) Me.CheckBox_Y.Checked = (.GetButtons(3) > 0) '上部ボタン Me.CheckBox_LB.Checked = (.GetButtons(4) > 0) Me.CheckBox_RB.Checked = (.GetButtons(5) > 0) Me.CheckBox_LT.Checked = (.GetButtons(6) > 0) Me.CheckBox_RT.Checked = (.GetButtons(7) > 0) 'アナログスティック中央ボタン Me.CheckBox_LCenter.Checked = (.GetButtons(10) > 0) Me.CheckBox_RCenter.Checked = (.GetButtons(11) > 0) End With End Sub Private Sub CheckBox_B_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox_B.CheckedChanged TextBox1.Text = TextBox1.Text + 1 End Sub End Class
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/30 09:40