ゲームコントローラの制御 †
説明 |
このTipsの完成に協力していただけるという方は、こちらをクリックして、記事を編集してください。記事を編集できるのは基本的には「本文」の部分ですが、題名や「要約」がTipsとして適当ではない場合は、これらを書き直すこともできます。詳しくは、こちらをご覧ください。
|
- 器の作成者:
- 投稿日:2009-08-05 (水) 02:04:54
要約 †
ゲームを製作するのに必要な要素のひとつであるゲームコントローラの抜き差し状態の検出や、押下ボタンの検出方法について
本文 †
Win32APIを使う †
joyGetPosEx 関数
誰かわかりやすく見やすいように手を加えてください・・・
Public Class Form1
''' <summary>
''' ジョイスティックを照会して、その位置とボタンの状態を取得します。
''' </summary>
''' <param name="uJoyID">照会するジョイスティック(JOYSTICKID1 または JOYSTICKID2)の識別子を指定します。</param>
''' <param name="pji">ジョイスティックの拡張位置情報とボタンの状態が入る JOYINFOEX 構造体のアドレスを指定します。dwSize メンバおよび dwFlags メンバの値は必ず設定してください。設定しない場合、この関数は失敗します。joyGetPosEx 関数から返される値は、dwFlags メンバで指定するフラグに依存します。</param>
''' <returns>関数が成功すると、JOYERR_NOERROR が返ります。</returns>
''' <remarks></remarks>
Declare Function joyGetPosEx Lib "winmm" (uJoyID As UInteger, ByRef pji As JOYINFOEX) As MMRESULT
''' <summary>
''' 指定されたウィンドウにメッセージを送信して、ジョイスティックをキャプチャします。
''' </summary>
''' <param name="hwnd">ジョイスティックメッセージを受信するウィンドウのハンドルを指定します。</param>
''' <param name="uJoyID">キャプチャするジョイスティック(JOYSTICKID1 または JOYSTICKID2)の識別子を指定します。</param>
''' <param name="uPeriod">ポーリングの頻度をミリ秒単位で指定します。</param>
''' <param name="fChanged">位置フラグを変更します。ジョイスティックの移動しきい値よりも大きい値で位置が変化したときだけメッセージを送信するには、このパラメータに TRUE を指定します。指定しない場合、メッセージは uPeriod パラメータで指定されたポーリング頻度で送信されます。</param>
''' <returns>関数が成功すると、JOYERR_NOERROR が返ります。</returns>
''' <remarks></remarks>
Declare Function joySetCapture Lib "winmm" (ByVal hwnd As IntPtr, ByVal uJoyID As Integer, ByVal uPeriod As UInteger, ByVal fChanged As Boolean) As MMRESULT
''' <summary>
''' 指定のキャプチャされているジョイスティックを解放します。
''' </summary>
''' <param name="uJoyID">解放するジョイスティック(JOYSTICKID1 または JOYSTICK2)の識別子を指定します。</param>
''' <returns>関数が成功すると、JOYERR_NOERROR が返ります。</returns>
''' <remarks></remarks>
Declare Function joyReleaseCapture Lib "winmm" (ByVal uJoyID As UInteger) As MMRESULT
Structure JOYINFOEX
Public dwSize As Integer
Public dwFlags As JOY
Public dwXpos As Integer
Public dwYpos As Integer
Public dwZpos As Integer
Public dwRpos As Integer
Public dwUpos As Integer
Public dwVpos As Integer
Public dwButtons As Integer
Public dwButtonNumber As Integer
Public dwPOV As Integer
Public dwReserved1 As Integer
Public dwReserved2 As Integer
End Structure
Public Const JOYSTICKID1 = 0
Public Const JOYSTICKID2 = 1
Public Enum MMRESULT As Integer
''' <summary>処理の成功を表します。</summary>
JOYERR_NOERROR = 0
''' <summary>ジョイスティックドライバが存在しません。</summary>
MMSYSERR_NODRIVER = 6
''' <summary>無効なパラメータが渡されました。</summary>
MMSYSERR_INVALPARAM = 11
''' <summary>指定されたジョイスティック識別子は無効です。</summary>
MMSYSERR_BADDEVICEID = 2
''' <summary>指定されたジョイスティックデバイスの識別子 uJoyID は無効です。</summary>
JOYERR_PARMS = 165
''' <summary>必要なサービス(WIndows タイマなど)が利用できないため、ジョイスティックの入力をキャプチャできません。</summary>
JOYERR_NOCANDO = 166
''' <summary>指定されたジョイスティックはシステムに接続されていません。</summary>
JOYERR_UNPLUGGED = 167
End Enum
'Windows Message
Enum MM As Integer
JOY1MOVE = &H3A0
JOY2MOVE = &H3A1
JOY1ZMOVE = &H3A2
JOY2ZMOVE = &H3A3
JOY1BUTTONDOWN = &H3B5
JOY2BUTTONDOWN = &H3B6
JOY1BUTTONUP = &H3B7
JOY2BUTTONUP = &H3B8
End Enum
Enum JOY As Integer
RETURNX = &H1
RETURNY = &H2
RETURNZ = &H4
RETURNR = &H8
RETURNU = &H10 ' axis 5
RETURNV = &H20 ' axis 6
RETURNPOV = &H40
RETURNBUTTONS = &H80
RETURNRAWDATA = &H100
RETURNPOVCTS = &H200
RETURNCENTERED = &H400
RETURNALL = (RETURNX + RETURNY + RETURNZ + RETURNR + RETURNU + RETURNV + RETURNPOV + RETURNBUTTONS)
End Enum
Dim joyInfo As New JOYINFOEX With { _
.dwSize = Len(joyInfo)}
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
joySetCapture(Me.Handle, JOYSTICKID1, 50, False)
End Sub
Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
joyReleaseCapture(JOYSTICKID1)
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case MM.JOY1MOVE
Dim Temp$ = Convert.ToString(m.LParam.ToInt32, 2)
Label1.Text = (Space(32 - Temp.Length).Replace(" "c, "0"c)) & Temp
Temp = Convert.ToString(m.WParam.ToInt32, 2)
Label2.Text = (Space(32 - Temp.Length).Replace(" "c, "0"c)) & Temp
End Select
MyBase.WndProc(m)
End Sub
End Class
|
コメント †
ページ情報 |
- カテゴリ : .NET
- 作成日 : 2009-08-05 (水) 02:04:54
- 最終編集日 : 2012-09-15 (土) 15:33:29
|