|
Weitere Teile:
DirectQB Teil 1 - Installation
DirectQB Teil 2 - Primitive Drawroutinen
DirectQB Teil 3 - Mouse und Sound
DirectQB Teil 4 - Sprites
DirectQB Teil 5 - Keyboard
DirectQB Tutorial
Teil 5 – Keyboard
Habt ihr euch nicht auch manchmal eine
richtig gute Inkeyroutine gewünscht. Ich meine, Inkey$ ist zwar zum
eingeben einzelner Buchstaben nicht schlecht aber für ein Spiel, bei
welchem man die Cusortasten benötigt, ist es der absolute Schwachsinn.
Man kann immer nur eine Taste drücken, es kommt immer zu einer Verzögerung
und wenn man zu lange drückt, schreit der Computer herum, dass man
doch gefälligst die Tasten los lassen soll (das BEEP).
Wie wäre es den mit einer Routine,
bei der man immer genau weiß, welche Taste gerade gedrückt wird
und welche gerade nicht gedrückt wird?
Nun, DirectQB bietet diese Routine. Leider
hat diese einige Nachteile aber dazu komme ich später.
Das wichtigste ist der Befehl
DQBinstallKeyboard
Dabei wird die Routine in den Speicher
geladen und ist gleich aktiv.
Mit der Funktion
DQBkey(X)
Kann man dann in Erfahrung bringen, welche
Taste gerade gedrückt wird.
Das X ist die Zahl der Taste, der Status
man ermitteln möchte.
Es ist zum Beispiel die 1 für ESC.
DQBkey liefert dann einen Wert ungleich
Null zurück wenn die Taste gedrückt wird. Wenn die taste nicht
gedrückt wird, wird der Wert gleich Null zurück geliefert.
Um die Keyboardroutine wieder zu deaktivieren
muß man einfach nur
DQBremoveKeyboard
Ausführen.
Das war‘s eigentlich schon. Aber kommen
wir nun zu den Problemen.
So lange die Routine aktiv ist, das heißt,
nachdem DQBinstallKeyboard ausgeführt wurde, kann QBasic keine Tasten
basierenden Funktionen mehr starten. Es funktioniert weder INKEY$
noch SLEEP 0 oder Input.
Das QBasic-Program kann auch nicht
mehr durch STRG + Pause beendet werden.
Man hat dann auch keine Kontrolle mehr
über QBasic selbst.
Es ist dann so, als ob das Keyboard nicht
mehr angeschlossen ist.
Es ist also unbedingt zu beachten, dass
immer DQBremoveKeyboard vor dem Beenden des Programms ausgeführt wird.
Wenn man dieses vergißt, kann man den PC nur noch neu starten.
Hier jetzt die List für die Tasten
1 = ESC
2 = 1
3 = 2
4 = 3
5 = 4
6 = 5
7 = 6
8 = 7
9 = 9
10 = 0
11 = - oder _
12 = = oder +
13 = Backspace
14 = Tab
15 = Q
17 = W
18 = E
19 = R
20 = T
21 = Y
22 = U
23 = I
24 = O
25 = P
26 = [ oder {
27 = ] oder }
28 = Enter
29 = Control
30 = A
31 = S
32 = D
33 = F
34 = G
35 = H
36 = J
37 = K
38 = L
39 = ; oder :
40 = ' oder "
41 = \ oder ~
42 = linkes Shift
44 = Z
45 = X
46 = C
47 = V
48 = B
49 = N
50 = M
51 = , oder <
52 = . oder >
53 = / oder ?
54 = rechtes Shift
55 = * oder Druck
56 = ALT
57 = Leer
58 = Caps Lock
59 = F1
60 = F2
61 = F3
62 = F4
63 = F5
64 = F6
65 = F7
66 = F8
67 = F9
68 = F10
69 = Num lock
70 = Rollen
71 = 7 oder Home
72 = 8 oder Hoch
73 = 9 oder Page up
74 = -
75 = 4 oder Links
76 = 5
77 = 6 oder Rechts
78 = +
79 = 1 oder END
80 = 2 oder Runter
81 = 3 oder Seite runter
82 = 0 oder Einfg
83 = . oder Entf
87 = F11
88 = F12
Diese List ist für ein Amerikanisches
Keyboard.
Hier noch ein Beispiel:
' All Integer
für die Geschwindigkeit
DEFINT A-Z
'$INCLUDE:'DIRECTQB.BI'
' Es wird DQB
ohne Extras geladen
IF DQBinit(0,
0, 0) THEN DQBclose: PRINT DQBerror$: END
' Keyboardroutine
wird installiert
DQBinstallKeyboard
CLS
PRINT "Keyboard
DEMO – drücke eine Taste für seinen Scanncode. Es sind auch mehrere
Tasten gleichzeitig erlaubt ; Drücke ESC zum Beenden."
DO
LOCATE 3, 1
' Suche nach allen Tasten
' Wenn eine Taste gedrückt wird dann zeige sie an
IF DQBkey(i) THEN PRINT "[" + LTRIM$(STR$(i)) + "] ";
NEXT i
' Löscht
ein Stück das Bildschirms
PRINT SPACE$(40)
' Schleife verlasen
wenn ESC gedrückt wird
LOOP UNTIL DQBkey(KEYESC)
' Beende KeyboardRoutine
DQBremoveKeyboard
' Beende Programm
DQBclose
Ich denke, dass das das Wichtigste war.
|