ATTENTION READERS! Lucky's VB Gaming Site is no longer active. For updated game programming information and tutorials, please visit The Game Programming Wiki!
Direct Input
Direct Input is een DirectX onderdeeld dat je directe toegang tot het keyboard en andere devices geeft. Dit is natuurlijk handig voor game-programming...
Dim dx As New DirectX7
Dim di As DirectInput
Dim diDEV As DirectInputDevice
Set di = dx.DirectInputCreate()
Set diDEV = di.CreateDevice("GUID_SysKeyboard")
diDEV.SetCommonDataFormat DIFORMAT_KEYBOARD
diDEV.SetCooperativeLevel Me.hWnd, DISCL_BACKGROUND Or DISCL_NONEXCLUSIVE
diDEV.Acquire
Net zoals elk ander object afgeleid van het hoofd-object 'DirectX', zoals DirectDraw, moeten we een instantie aanmaken dat DirectInput gaat vertegenwoordigen. DirectInput vraagt eerst welke "device" we gaan gebruiken, in dit geval het keyboard. Dus, roepen we de "di.CreateDevice" methode aan en krijgen als return value het DirectInputDevice ("diDev").
Volgende stap is het data formaat (kortweg: data format) van het device gelijkstellen aan het keyboard data format. Dit doen we door "diDEV.SetCommonDataFormat" aan te roepen. We zouden dit ook kunnen gebruiken om het dataformaat gelijk te stellen aan Joy1, Joy2, of de muis.
Net zoals DirectDraw, moeten we de "cooperative level" instellen. We geven het de handle van ons venster door, waarvan we de keyboard input willen verkrijgen. Als de code zich bevindt in de module van het venster zelf, dan kunnen we "Me.hWnd" gebruiken. "DISCL_BACKGROUND" en "DISCL_NONEXCLUSIVE" laten andere toepassingen toe om het keyboard te gebruiken, en geeft er ons volledige toegang tot.
Nu dat we ons device hebben opgesteld, moeten we het ook nog verkrijgen door de "diDEV.Acquire" methode.
Dim diState As DIKEYBOARDSTATE
Dim i As Integer
Public aKeys(211) As Boolean
diDEV.GetDeviceStateKeyboard diState
For i = 1 To 211
If diState.Key(i) <> 0 Then
aKeys(i) = True
Else
aKeys(i) = False
End If
Next
Alles is geïnitialiseerd en we kunnen nu onze code nuttig gebruiken. "diState" is een object dat de status van alle toetsen van het keyboard bevat, en we kunnen onze gegevens daaruit halen via een array en een loop. Elke toets stemt overeen met een integrale waarde tussen 0 en 211. Als we dan een array van 212 leden maken, kunnen we een overzicht houden van de actieve toetsen en wanneer. Gebruik de "diDev.GetDeviceStateKeyboard" methode om de "diState" variabele in te vullen, en dan de gegevens eruit halen en bewaren in onze array "aKeys" door gebruik te maken van een loop.
Klik hier om een voorbeeld te downloaden dat dit illustreert.