Our Sites:  Tutorial Buzz  |  How To Tree  |  Recipe Voice  |  Golf Twist  |  DIY Click  |  Movie Lizard  |  Halloween Twist  
Search:
Submit Link
Mail to a Friend
RSS FeedReceive updates via our RSS feed

Handling Joystick Input in Visual Basic

This tutorial will use the Windows API to get joystick input.

API Definitions
Here is a list of what functions and type's we will need. I suggest adding a module or class to your project and adding these there.

Function's

Public Declare Function joyGetPosEx Lib "winmm.dll" (ByVal uJoyID As Long, _
pji As JOYINFOEX) As Long

Public Declare Function joyGetDevCapsA Lib "winmm.dll" (ByVal uJoyID As Long, _
pjc As JOYCAPS, ByVal cjc As Long) As Long

joyGetPosEx returns input information.

joyGetDevCapsA returns information on the joystick.

Type's

Public Type JOYCAPS
   wMid As Integer
   wPid As Integer
   szPname As String * 32
   wXmin As Long
   wXmax As Long
   wYmin As Long
   wYmax As Long
   wZmin As Long
   wZmax As Long
   wNumButtons As Long
   wPeriodMin As Long
   wPeriodMax As Long
   wRmin As Long
   wRmax As Long
   wUmin As Long
   wUmax As Long
   wVmin As Long
   wVmax As Long
   wCaps As Long
   wMaxAxes As Long
   wNumAxes As Long
   wMaxButtons As Long
   szRegKey As String * 32
   szOEMVxD As String * 260
End Type

Public Type JOYINFOEX
   dwSize As Long
   dwFlags As Long
   dwXpos As Long
   dwYpos As Long
   dwZpos As Long
   dwRpos As Long
   dwUpos As Long
   dwVpos As Long
   dwButtons As Long
   dwButtonNumber As Long
   dwPOV As Long
   dwReserved1 As Long
   dwReserved2 As Long
End Type

Other public variables

Public JoyNum As Long
Public MYJOYEX As JOYINFOEX
Public MYJOYCAPS As JOYCAPS
Public CenterX As Long
Public CenterY As Long
Public JoyButtons(15) as Boolean
Public CurrentJoyX As Long
Public CurrentJoyY As Long


Coding the Input
Create a function named StartJoystick. All this does is get the CAPS and Center positions:

Public Function StartJoystick(Optional ByVal JoystickNumber As Long = 0) As Boolean
   JoyNum = JoystickNumber
   If joyGetDevCapsA(JoyNum, MYJOYCAPS, 404) <> 0 Then 'Get joystick info
      StartJoystick = False
   Else
      Call joyGetPosEx(JoyNum, MYJOYEX)
      CenterX = MYJOYEX.dwXpos
      CenterY = MYJOYEX.dwYpos
      StartJoystick = True
   End If
End Function

As you can see, it's not too complicated. The JoystickNumber variable is what joystick you want to get input from. This is usually zero, but can be one [or two for hardcore users...:)].

Next, add a function called PollJoystick. This function will get all the information from the joystick, then sort it out:

Public Sub PollJoystick()
   Dim i As Long
   Dim t As Long

   MYJOYEX.dwSize = 64
   MYJOYEX.dwFlags = 255

   ' Get the joystick information
   Call joyGetPosEx(JoyNum, MYJOYEX)

   t = myJoy.dwButtons
   For i = 15 To 0 Step -1
      JoyButtons(i) = False
      If (2 ^ i) <= t Then
         t = t - (2 ^ i)
         JoyButtons(i) = True
      End If
   Next i

   CurrentJoyX = MYJOYEX.dwXpos
   CurrentJoyY = MYJOYEX.dwYpos
End Sub

Now you have the ability to get input from the joystick. But how do you use it? And what's with the complicated code? Well, that complicated code is what tells you what buttons are pressed. How? When you press button zero on your joystick, the joystick tells the computer 1. Press one, it says 2. But press two, it says four. Press three, and its 8. See the pattern? If not, here it is:

2^0=1
2^1=2
2^2=4
2^3=8
2^4=16
2^5=32

See? So press buttons zero, two and three, and the joystick tells the computer 11. How do we sort this out? Start with the highest number, then goto zero. If the current number is within the input number (11 in our example), then subtract that from from the number. So in our example, it would get the 2^3=8, so subtract it, leaving us with 3. Then it gets to 2^1=2, subtract it, leaving 1. So then 2^0=1, subtract it, leaving zero. Get it? If not, trust me (I'm bad at explaining algorithms).

Done
Download the source code to see it in action, in a stupid little game.

About this Tutorial
This tutorial is from The Game Progamming Wiki which is published under the GNU Free Documentation License 1.2.

Home  |  News  |  Source Code  |  Tutorials  |  Components  |  Tools  |  Books  |  Free Magazines  |  Jobs  |  Gear  |  Hosting  |  Links
 
Copyright © 2000 - 2006 Code Beach  |    |  Privacy Policy
 
Free thumbnail preview by Thumbshots.org