Scancode ermitteln
Übersicht

![]() |
xaeroxBetreff: Scancode ermitteln |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm.... könntest du mir bitte einen beispielcode geben? wäre echt nett | ||
Biker sind wahre Helden.
Auch Musiker. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
getkey liefert aber den ascii code | ||
Biker sind wahre Helden.
Auch Musiker. |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh sry, das stimmt... mein Fehler... >.<
Nja, bei meinem Taschenrechner war das so, aber oki, hier nicht ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
xaerox |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ouuuhhh danke...das is eben gut | ||
Biker sind wahre Helden.
Auch Musiker. |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group