Scancode ermitteln

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

xaerox

Betreff: Scancode ermitteln

BeitragFr, Okt 03, 2008 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Print "Rückwärts"
For i = 0 To 237
If KeyHit(i) Then backward = i : Exit
Next

Print "Rechts"
For i = 0 To 237
If KeyHit(i) Then Right = i : Exit
Next

Print "Links"
For i = 0 To 237
If KeyHit(i) Then Left = i : Exit
Next

Print "Kriechen"
For i = 0 To 237
If KeyHit(i) Then crouch = i : Exit
Next

Print "Hinlegen"
For i = 0 To 237
If KeyHit(i) Then prone = i : Exit
Next

Print "Sprinten"
For i = 0 To 237
If KeyHit(i) Then sprint = i : Exit
Next
Print "Feuer"
For i = 0 To 237
If KeyHit(i) Then fire = i : Exit
Next

Print "Zielen"
For i = 0 To 237
If KeyHit(i) Then secondfire = i : Exit
Next

Print "Laden"
For i = 0 To 237
If KeyHit(i) Then reload = i : Exit
Next

Print "Waffe1"
For i = 0 To 237
If KeyHit(i) Then weapon1 = i : Exit
Next

Print "Waffe2"
For i = 0 To 237
If KeyHit(i) Then weapon2 = i : Exit
Next

Print "Waffe3"
For i = 0 To 237
If KeyHit(i) Then weapon3 = i : Exit
Next

Print "Messer"
For i = 0 To 237
If KeyHit(i) Then knife = i : Exit
Next

Print "Granate"
For i = 0 To 237
If KeyHit(i) Then nade = i : Exit
Next

Print "Benutzen"
For i = 0 To 237
If KeyHit(i) Then useintem = i : Exit
Next

Print "Tür einbrechen"
For i = 0 To 237
If KeyHit(i) Then breakdoor = i : Exit
Next

Print "Screenshot machen (ist sehr langsam)"
For i = 0 To 237
If KeyHit(i) Then screenshot = i : Exit
Next

Print "Quicksave"
For i = 0 To 237
If KeyHit(i) Then quicksave = i : Exit
Next

Print "Quickload"
For i = 0 To 237
If KeyHit(i) Then quickload = i : Exit
Next


Sehe ich nur ein paar zeilen und program has ended... ich will aber nach jedem for-next dann eine taste drücken können um den scancode in einer variable zu speichern.
Biker sind wahre Helden.
Auch Musiker.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Okt 03, 2008 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Du bastelst dir am besten eine Funktion die für alle Tasten gilt und von sich aus ein Loop bildet, der so lange läuft, bis eine Taste gedrückt wird. Allerdings müssten dann auch die Variablen-ID variabel gehalten werden können. Sprich: Sie müssten in ein Array oder andersweitig von ausserhalb angesprochen werden können.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

xaerox

BeitragFr, Okt 03, 2008 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
hm.... könntest du mir bitte einen beispielcode geben? wäre echt nett
Biker sind wahre Helden.
Auch Musiker.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Okt 03, 2008 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab die Funktion verworfen, da sie eine grundlegende Änderung der Variablen selbst bedeuten würde. In diesem Fall also dein Ansatz aufgegriffen und richtig gestellt. Es fehlte ein endloser Loop zu jeder Taste. Auch ist es vom Vorteil, so einfache Sachen nicht bei Vollast laufen zu lassen. Hier also mit Delay abgebremst.

Code: [AUSKLAPPEN]
Graphics 400,300,0,2
SetBuffer BackBuffer()

Local TasteA
Local TasteB
Local TasteC
Local Q


FlushKeys


Repeat
   For Q=0 To 237
      If KeyHit(Q) Then TasteA=Q
   Next
   
   Text 20,20,"Taste A"
   Delay 20
   Flip 0
   Cls
Until TasteA<>0


Repeat
   For Q=0 To 237
      If KeyHit(Q) Then TasteB=Q
   Next
   
   Text 20,20,"Taste B"
   Delay 20
   Flip 0
   Cls
Until TasteB<>0


Repeat
   For Q=0 To 237
      If KeyHit(Q) Then TasteC=Q
   Next
   
   Text 20,20,"Taste C"
   Delay 20
   Flip 0
   Cls
Until TasteC<>0


Print TasteA
Print TasteB
Print TasteC


FlushKeys
WaitKey
End


Edit1: Das muß allerdings nicht die beste Lösung sein. Vielleicht fällt noch jemanden etwas besseres ein...
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Tankbuster

BeitragFr, Okt 03, 2008 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich würde es mit GetKey machen. Geht doch viel leichter:

So nach dem Motto

Zitat:
Graphics 400,300,0,2
SetBuffer BackBuffer()

While Not KeyDown(1)

Taste=GetKey()
If Taste<>0 Then Print Taste

Text 100,100,"Dum di dum"
Flip
Wend


Dann halt immer Taste noch in einer anderen Variable speichern und gut ist......
Twitter
Download Jewel Snake!
Windows|Android

xaerox

BeitragFr, Okt 03, 2008 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
getkey liefert aber den ascii code
Biker sind wahre Helden.
Auch Musiker.

FireballFlame

BeitragFr, Okt 03, 2008 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Und funktioniert nicht mit jeder Taste
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Tankbuster

BeitragFr, Okt 03, 2008 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh sry, das stimmt... mein Fehler... >.<
Nja, bei meinem Taschenrechner war das so, aber oki, hier nicht Embarassed
Twitter
Download Jewel Snake!
Windows|Android

xaerox

BeitragFr, Okt 03, 2008 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab mal hier einen board vor einer zeit gefunden und ich denke ich mache es so also mal einen schönen text schreiben...

a = scancode?
b = scancode?
...




alle tasten also dann



alles mit global und dann muss der benutzer einen buchstaben eintippen der wird in der cfg eingespeichert und dann ...versteht ihr mich?
Biker sind wahre Helden.
Auch Musiker.

SpionAtom

BeitragFr, Okt 03, 2008 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Und schon wieder kann ich meine Inputroutine als Beispiel angeben^^

Benutze updateKeys() in der Hauptschleife, dann hast du im Array einen Überblick, welche Taste gerade gedrückt wurde.
keys(scancode, value)
value 0 - Status der Taste (kann 0 oder 1 werden)
value 1 - Zeitpunkt, zu dem die Taste gedrückt wurde
value 2 - Resultierende Druckzeit
keys(0, 0) beinhaltet die zuletzt gedrückte Taste (wenn mehrere Tasten gedrückt sind)
Sind zwar noch nicht alle Tasten drin, aber ich bin schon recht zufrieden damit.

Code: [AUSKLAPPEN]
;input Field:
; eine Input-Routine, die es erlaubt, Tasten gedrüüüüüüückt zu lassen - wers braucht
; von SpionAtom begonnen September 2oo8
;---------------------------------------------------------
; Keine lästigen Types und komplizierten Aufbauten. 3 Globals, und 2 Funktionen, und ab gehts.
; Jedes Inputfield benötigt lediglich eine Variable.
;---------------------------------------------------------
;Programmaufbau:
;
;   Dim keys(211, 2)
;   Global freshPressing, lastTyped
;
;   MainLoop:
;      updateKeys()
;
;      Zeichenphase:
;         e$ = inputField(e$, x, y, breite, aktiv, Look)
;   
;---------------------------------------------------------
;   x, y, breite   - Position und Ausmaße des Feldes
;   aktiv         - Gibt an, ob das Feld aktiv ist oder nicht
;   Look         - 0 Standardlook (1 alternativlook), man kann leicht weitere einfügen



   Dim keys(211, 2) ;0-pressed 1-startedPressing 2-presstime
   Global freshPressing, lastTyped

   Graphics 400, 300, 0, 3
   SetBuffer BackBuffer()
   ClsColor 63, 83, 123
   SetFont LoadFont("Arial", 16)

   aktiv = 0
   Repeat
   
      updateKeys()
   
      Cls      
      For i = 1 To 40 ;bling bling
         SeedRnd i
         Color Rand(255), Rand(255), Rand(255)
         Oval GraphicsWidth() / 2 - Sin(i * 20 + MilliSecs() / 10) * GraphicsWidth() / 2, i * 7, 5, 5
      Next
      
      Color 255, 255, 255: Text 10, GraphicsHeight() - 78, "Press Tab To switch Field" ;Switch input field
      If KeyHit(15) Then aktiv = 1 - aktiv: FlushKeys()
      txt$ = inputField(txt$, 10, GraphicsHeight() - 26, GraphicsWidth() - 20, aktiv, 0)
      txt2$ = inputField(txt2$, 10, GraphicsHeight() - 52, GraphicsWidth() - 20, 1 - aktiv, 1)
      
      
      Color 0, 255, 0 ;debug
      If keys(0, 0) <> -1 Then Text 10, 2, "Scancode: " + keys(0, 0) + ", " + keys(0, 2) + "ms"

      Flip()   
   
   Until KeyDown(1)
   End
   
   

;Aufruf: eingabe$ = inputField(eingabe$, x, y, breite, aktiv, Look)
Function inputField$(t$, x, y, w, isActive = True, look = 0)
   ;
   ; _________________________________
   ;/ Hier kann experimentiert werden \
   waitForRepeat = 450    ;wie lange eine Taste am Anfang gedrückt sein muss, bevor er wiederholt eingetippt wird
   repeatWaittime = 60    ;wie schnell bei gedrückter Taste wiederholt eingetippt wird.
   If look = 0 Then cur$ = "_"   ;Curser
   If look = 1 Then cur$ = ">"
   curserBlinktime = 500   ;Curser Blinkzeit
   ;\_________________________________/
   ;
   
   h = StringHeight("|") + 5
   tx = 0   
   If isActive And (MilliSecs() / curserBlinktime) Mod 2 Then curString$ = cur$ Else curString$ = ""
   shift = KeyDown(42) Or KeyDown(54)
   altgr = KeyDown(184)
   key = keys(0, 0)
   If isActive Then
   toType$ = ""   
   If key <> -1 Then
      If key =  2 Then If shift Then toType = "!" Else toType = "1"
      If key =  3 Then If altgr Then toType = "²" Else  If shift Then toType = Chr$(34) Else toType = "2"
      If key =  4 Then If altgr Then toType = "³" Else If shift Then toType = "§" Else toType = "3"
      If key =  5 Then If shift Then toType = "$" Else toType = "4"
      If key =  6 Then If shift Then toType = "%" Else toType = "5"
      If key =  7 Then If shift Then toType = "&" Else toType = "6"
      If key =  8 Then If altgr Then toType = "{" Else  If shift Then toType = "/" Else toType = "7"
      If key =  9 Then If altgr Then toType = "[" Else  If shift Then toType = "(" Else toType = "8"
      If key = 10 Then If altgr Then toType = "]" Else  If shift Then toType = ")" Else toType = "9"
      If key = 11 Then If altgr Then toType = "}" Else  If shift Then toType = "=" Else toType = "0"
      If key = 12 Then If altgr Then toType = "\" Else  If shift Then toType = "?" Else toType = "ß"      
      If key = 16 Then If altgr Then toType = "@" Else toType = "q"
      If key = 17 Then toType = "w"
      If key = 18 Then If altgr Then toType = "€" Else toType = "e"
      If key = 19 Then toType = "r"
      If key = 20 Then toType = "t"
      If key = 21 Then toType = "z"
      If key = 22 Then toType = "u"
      If key = 23 Then toType = "i"
      If key = 24 Then toType = "o"
      If key = 25 Then toType = "p"
      If key = 26 Then If shift Then toType = "Ü" Else toType = "ü"
      If key = 30 Then toType = "a"
      If key = 31 Then toType = "s"
      If key = 32 Then toType = "d"
      If key = 33 Then toType = "f"
      If key = 34 Then toType = "g"
      If key = 35 Then toType = "h"
      If key = 36 Then toType = "j"
      If key = 37 Then toType = "k"
      If key = 38 Then toType = "l"
      If key = 39 Then If shift Then toType = "Ö" Else toType = "ö"
      If key = 40 Then If shift Then toType = "Ä" Else toType = "ä"
      If key = 44 Then toType = "y"
      If key = 45 Then toType = "x"
      If key = 46 Then toType = "c"
      If key = 47 Then toType = "v"
      If key = 48 Then toType = "b"
      If key = 49 Then toType = "n"
      If key = 50 Then toType = "m"
      If key = 51 Then If shift Then toType = ";" Else toType = ","
      If key = 52 Then If shift Then toType = ":" Else toType = "."
      If key = 53 Then If shift Then toType = "_" Else toType = "-"
      If key = 57 Then toType = " "
      If shift And Asc(toType) >= 97 And Asc(toType) <= 122 Then toType = Upper(toType)
      
      
   End If   
   If (keys(0, 2) < waitForRepeat And freshPressing <> keys(0, 0)) Or (keys(0, 2) > waitForRepeat And MilliSecs() - lastTyped > repeatWaittime) Then
      lastTyped = MilliSecs()
      If keys(0, 0) = 14 Then ;Backspace
         If Len(t$) > 0 Then t$ = Left$(t$, Len(t$) - 1)
      Else         
         If toType <> "" Then t$ = t$ + toType         
      End If
   End If
   freshPressing = keys(0, 0)
   End If
   
   
   
   If StringWidth(t$) > w - StringWidth(cur$) * 2 Then tx = -StringWidth(t$) + w - StringWidth(cur$) * 2

   ; ______
   ;/ LOOK \
   ;\______/
   ; Fügt eure eigenen Looks hinzu!
   Viewport x, y, w, h
   If look = 0 Then
      If isActive Then Color 163, 163, 163 Else Color 123, 123, 123
      Rect x, y, w, h
      If isActive Then Color 255, 255, 255 Else Color 200, 200, 200
      Text x + 2 + tx, y + 2, t$ + curString$   
      Color 63, 63, 63
      Rect x, y, w, h, 0
   End If
   If look = 1 Then
      Color 0, 0, 0
      Rect x, y, w, h
      If isActive Then Color 55, 255, 55 Else Color 0, 200, 0
      Text x + 2 + tx, y + 2, t$ + curString$         
      Rect x, y, w, h, 0   
   End If
   Viewport 0, 0, GraphicsWidth(), GraphicsHeight()

   Return t$

End Function

Function updateKeys()   
   keys(0, 2) = 2147483647
   keys(0, 0) = -1
   For i = 1 To 211
      If KeyDown(i) Then
         If Not keys(i, 0) Then
            keys(i, 0) = True
            keys(i, 1) = MilliSecs()            
         Else
            keys(i, 2) = MilliSecs() - keys(i, 1)
         End If
         If keys(i, 2) < keys(0, 2) Then
            keys(0, 2) = keys(i, 2)
            keys(0, 0) = i
         End If
      Else
         keys(i, 0) = False
         keys(i, 2) = 0
      End If
   Next
End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

xaerox

BeitragFr, Okt 03, 2008 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
ouuuhhh danke...das is eben gut
Biker sind wahre Helden.
Auch Musiker.

Eingeproggt

BeitragFr, Okt 03, 2008 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat es ja angesprochen und iwie wundert es mich, dass er die Idee fallen hat lassen. Das ist doch gut in so einer schlanken, überall verwendbaren Funktion:

Code: [AUSKLAPPEN]
Function GetScan()
   Repeat
      For i=0 To 237
         If KeyHit(i) Then Return i
      Next
   Forever
End Function


(Wenn ich mich recht entsinne, wurde genau so eine Funktion von jemanden zu einem von Coffee's Wettbewerben beigesteuert und wurde belohnt, also so schlecht kann sie nicht sein Smile )

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Okt 03, 2008 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Achja, stimmt ja... *lalala*

Ich hab in dem Moment an etwas ganz anderes gedacht. Nämlich, dass die Funktion selbst die Variable beschreibt, was ja total unnötig ist. Embarassed
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group