Tastenauswahl
Übersicht

cavebirdBetreff: Tastenauswahl |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hat vielleicht einer einen kleinen Code, wo man mit Tastendruck auswählen kann welche Taste für z.B. schießen ist? Ich frage nur weil ich seit 3 tagen versuche so etwas zu proggen aber...ich bin *dumm*-*dumm!!!* ![]() |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Probiers mal mit Getkey() oder so und speicher den Wert in eine Variable ab. | ||
Asus F53z
Das Leben ist eine reine Konkatenation... |
cavebird |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das habe ich doch alles schon probiert...ich sage nur brett vorm kopf....
[edit]hmm...ich kiffe seit 3 Tagen...hmm seit 3 tagen bin ich dumm...[/edit] |
||
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Lieber nicht GetKey.
Code: [AUSKLAPPEN] While Not Keyhit(1)
Der Rest sollte ja nicht allzu schwer sein.
For i = 2 To 237 If Keyhit(i) Then Print "Neue Tastaturbelegung festlegen auf Taste mit Scancode: " + i End If Next Wend |
||
![]() |
ChrisAttack |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] global key_shoot ... function auswahl(key) repeat text 0,50,"Tastaturbelegung für Schiessen: " key = getkey() until (key <> 0) end function ... graphics 800,600,16,1 setbuffer backbuffer() auswahl key_shoot repeat if keydown(key_shoot)=1 then shoot_gegner_weg until spiel_zu_ende |
||
B3D
MSVC++ DX9SDK |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Argh. Das kann gar nicht klappen, ChrisAttack. Erstens gibt GetKey keine Scan - sondern ASCII - Codes zurück, und zweitens kannst du keine Globalen "als Parameter übergeben". | ||
![]() |
ChrisAttack |
![]() Antworten mit Zitat ![]() |
---|---|---|
stimmt. aber das hier klappt...
Code: [AUSKLAPPEN] global guiEingabe$ ;Input function guiInput(x,y,w,h) color 255,255,255 rect x,y,w,h,1 if MouseOver(x,y,w,h) and stringwidth(guiEingabe$)< (w-11) then color 0,0,0 A = GetKey() if A > 31 then guiEingabe$ = guiEingabe$ + chr$(A) endif color 0,0,0 text x,y, guiEingabe$ + "_" end function ;MouseOver Function MouseOver(x,y,w,h) If MouseX() > x And MouseX() < x+w And MouseY() > y And MouseY() < y+h Then Return 1 End Function graphics 800,600,32,2 setbuffer backbuffer() repeat cls guiInput(100,100,200,50) flip until keyhit(1) |
||
B3D
MSVC++ DX9SDK |
cavebird |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Edlothiol: Danke dein Code funktioniert.
ChrisAttack: Ich verstehe nicht, was dein 2. Skript bringt. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ChrisAttack: siehe Dein eigenes Avatar ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
ChrisAttack |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() |
||
B3D
MSVC++ DX9SDK |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich krame diesen Thread mal wieder heraus, weil ich für meine Frage nicht extra einen Neuen eröffnen möchte.
Ich habe für ein Spiel eine benutzerdefinierbare Steuerung programmiert. Weil die Befehle KeyHit und KeyDown mit den ScanCodes arbeiten, habe ich also diese abgefragt. Jetzt muss ich diese ScanCodes zur Anzeige der verwendeten Taste aber irgendwie wieder zurückwandeln. Gibt es da eine elegantere Methode als eine Funktion zu schreiben und jedem ScanCode selbst eine Bezeichnung zuzuweisen? Und dann würde mich noch interessieren, warum ich die Codes für die Funktions- und Steuerungstasten nicht abfragen kann. Zum Abfragen benutze ich diesen Code hier: Code: [AUSKLAPPEN] If ConfigureMenu = 1 Then ; Vorwärts ConfigureSelectorY = -((140+y)*2)+768 If KeyHit(28) Then FlushKeys() WaitKey() For i = 2 To 237 If KeyHit(i) Then KeyForwards = i Next EndIf EndIf Wird also ein Menüpunkt angewählt und mit Enter bestätigt, dann kann die neue Taste gedrückt werden. Die Schleife prüft dann, welchen Scancode die Taste hatte. Das funktioniert mit einigen Tasten aber leider nicht. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
Jake |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habs gerade mal ausprobiert, das Problem ist Waitkey().
So gehts: Code: [AUSKLAPPEN] Repeat If KeyHit(28) Then FlushKeys() KeyForwards=0 Repeat For i = 2 To 237 If KeyHit(i) Then KeyForwards = i Next Until KeyForwards>0 DebugLog KeyForwards EndIf Forever Andere Frage ist, warum Waitkey da Probleme macht. Bei deiner Version gehen z.B. die normalen Cursortasten, die auf dem Nummernblock nicht. |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aha, WaitKey reagiert auf gewisse Tasten nicht. Dann könnte man es auch so machen, aber deine Lösung gefällt mir besser.
Unnötig zu sagen, das das nicht gerade schön ist. Code: [AUSKLAPPEN] If ConfigureMenu = 2 Then ; Rückwärts ConfigureSelectorY = -((160+y)*2)+768 If KeyHit(28) Then FlushKeys() Repeat For i = 2 To 237 If KeyHit(i) Then KeyBackwards = i: Exit Next If KeyBackwards = i Then Exit Forever EndIf EndIf Naja, egal. Solange es funktioniert könnte ich mit dieser Methode leben. Aber wie wandle ich diese ScanCodes jetzt in Buchstaben zurück. Muss ich wirklich eine Funktion schreiben, die jeden einzelnen ScanCode übersetzt? |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
- Zuletzt bearbeitet von Travis am So, Jul 25, 2004 15:42, insgesamt einmal bearbeitet
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eigentlich schon, allerdings hat das glaube ich schon jemand bei BlitzCoder gemacht...
Edit: Habs gefunden: http://www.blitzcoder.com/cgi-...omments=no Nur ist das eben alles auf Englisch... |
||
Jake |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich mach das bei mir zweigleisig, d.h. ich frage "normale" Tasten als Ascii ab, und Sondertasten über Scancodes, die ich über Bits maskiere:
Code: [AUSKLAPPEN] type Shortcut Key% ; Ascii KeyEx% ; Scancode end type Das ist wahrscheinlich nicht weniger aufwändig als nen Scancode in Ascii zurückzuwandeln, aber so kann ich Mehrfachkombinationen schön verpacken. |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für meine Sache brauche ich eine Funktion, die den ScanCode direkt übersetzt.
Weil ich ziemlich Tippfaul bin, habe ich mal versucht das zu automatisieren. Die Liste wird automatisch erstellt. Man drückt eine Taste und dann gibt man einfach die Bezeichnung ein. Und weil der Puffer nicht gelöscht ist, steht der korrekte Buchstabe schon da und man braucht nur noch Enter drücken! Leider reagiert die Inputroutine nicht auf alle Tasten, so kann man z.B. kein ` eingeben. Code: [AUSKLAPPEN] Datei = WriteFile("Translator.bb") Repeat Cls Text 0,20, "Drücken Sie eine Taste!" FlushKeys() Tastendruck = 0 Repeat For i = 2 To 237 If KeyHit(i) Then Tastendruck = i Next Until Tastendruck <> 0 Bezeichnung$ = Input("Welche Taste haben Sie gedrückt?") If Bezeichnung$ = "-1" Then End WriteLine Datei, "IF ScanCode = " + Tastendruck + " Then Return " + Chr(34) + Bezeichnung + Chr$(34) Flip Forever |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie gesagt, schau dir http://www.blitzcoder.com/cgi-...omments=no das mal an, da sind die Tastennamen in einem Array gespeichert. Das zu übersetzen ist immerhin besser als es nochmal völlig neu zu schreiben. | ||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, jetzt habe ich herausgefunden, wie das ganze funktioniert. Es hat mich ziemlich irritiert, das die Arrays kein $-Zeichen haben und trotzdem einen String enthalten.
EDIT: Da fällt mir gerade ein, ich will mein Spiel ja sowieso in englischer Sprache halten. Die Funktion ist genau das was ich gesucht habe. Danke! PS: [Flüster]Wie heisst eigentlich diese Taste links neben dem A?[/Flüster] Code: [AUSKLAPPEN] Function TastenBezeichnung$(ScanCode) If ScanCode = 59 Then Return "F1" If ScanCode = 60 Then Return "F2" If ScanCode = 61 Then Return "F3" If ScanCode = 62 Then Return "F4" If ScanCode = 63 Then Return "F5" If ScanCode = 64 Then Return "F6" If ScanCode = 65 Then Return "F7" If ScanCode = 66 Then Return "F8" If ScanCode = 67 Then Return "F9" If ScanCode = 68 Then Return "F10" If ScanCode = 68 Then Return "F11" If ScanCode = 88 Then Return "F12" If ScanCode = 70 Then Return "Rollen" If ScanCode = 69 Then Return "Pause" If ScanCode = 41 Then Return "°" If ScanCode = 2 Then Return "1" If ScanCode = 3 Then Return "2" If ScanCode = 4 Then Return "3" If ScanCode = 5 Then Return "4" If ScanCode = 6 Then Return "5" If ScanCode = 7 Then Return "6" If ScanCode = 8 Then Return "7" If ScanCode = 9 Then Return "8" If ScanCode = 10 Then Return "9" If ScanCode = 11 Then Return "0" If ScanCode = 12 Then Return "ß" If ScanCode = 13 Then Return "" If ScanCode = 14 Then Return "Backspace" If ScanCode = 15 Then Return "Tabulator" If ScanCode = 16 Then Return "Q" If ScanCode = 17 Then Return "W" If ScanCode = 18 Then Return "E" If ScanCode = 19 Then Return "R" If ScanCode = 20 Then Return "T" If ScanCode = 21 Then Return "Z" If ScanCode = 22 Then Return "U" If ScanCode = 23 Then Return "I" If ScanCode = 24 Then Return "O" If ScanCode = 25 Then Return "P" If ScanCode = 26 Then Return "Ü" If ScanCode = 27 Then Return "+" If ScanCode = 30 Then Return "A" If ScanCode = 31 Then Return "S" If ScanCode = 32 Then Return "D" If ScanCode = 33 Then Return "F" If ScanCode = 34 Then Return "G" If ScanCode = 35 Then Return "H" If ScanCode = 36 Then Return "K" If ScanCode = 37 Then Return "K" If ScanCode = 38 Then Return "L" If ScanCode = 39 Then Return "Ö" If ScanCode = 40 Then Return "Ä" If ScanCode = 86 Then Return "<" If ScanCode = 44 Then Return "Y" If ScanCode = 45 Then Return "X" If ScanCode = 46 Then Return "C" If ScanCode = 47 Then Return "V" If ScanCode = 48 Then Return "B" If ScanCode = 49 Then Return "N" If ScanCode = 50 Then Return "M" If ScanCode = 51 Then Return "," If ScanCode = 52 Then Return "." If ScanCode = 53 Then Return "-" If ScanCode = 42 Then Return "Linke Shift" If ScanCode = 54 Then Return "Rechte Shift" If ScanCode = 43 Then Return "#" If ScanCode = 29 Then Return "Linke Strg" If ScanCode = 219 Then Return "Linke Windows" If ScanCode = 56 Then Return "Linke Alt" If ScanCode = 57 Then Return "Leertaste" If ScanCode = 184 Then Return "Alt Gr" If ScanCode = 220 Then Return "Rechte Windows" If ScanCode = 221 Then Return "Startmenü" If ScanCode = 157 Then Return "Rechte Strg" If ScanCode = 210 Then Return "Einf" If ScanCode = 199 Then Return "Pos1" If ScanCode = 201 Then Return "Bild auf" If ScanCode = 211 Then Return "Entf" If ScanCode = 207 Then Return "Ende" If ScanCode = 209 Then Return "Bild ab" If ScanCode = 200 Then Return "Pfeil hoch" If ScanCode = 203 Then Return "Pfeil links" If ScanCode = 205 Then Return "Pfeil rechts" If ScanCode = 208 Then Return "Pfeil runter" If ScanCode = 197 Then Return "Num" If ScanCode = 181 Then Return "/ Ziffernblock" If ScanCode = 55 Then Return "* Ziffernblock" If ScanCode = 74 Then Return "- Ziffernblock" If ScanCode = 71 Then Return "7 Ziffernblock" If ScanCode = 72 Then Return "8 Ziffernblock" If ScanCode = 73 Then Return "9 Ziffernblock" If ScanCode = 75 Then Return "4 Ziffernblock" If ScanCode = 76 Then Return "5 Ziffernblock" If ScanCode = 77 Then Return "6 Ziffernblock" If ScanCode = 79 Then Return "1 Ziffernblock" If ScanCode = 80 Then Return "2 Ziffernblock" If ScanCode = 81 Then Return "9 Ziffernblock" If ScanCode = 82 Then Return "0 Ziffernblock" If ScanCode = 83 Then Return ", Ziffernblock" If ScanCode = 156 Then Return "Enter" If ScanCode = 78 Then Return "+ Ziffernblock" If ScanCode = 28 Then Return "Return" End Function |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
Ensign Joe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Caps Lock | ||
Ich habe jetzt eine Pommesbude aufgemacht am Münchner Hauptbahnhof.
Und da ich Herbert Görgens heiße, heißt diese Pommesbude Herbert's Pommesbude ![]() |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group