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.

Translated by Djamel Grine