Hey Leute, bei unserem aktuellen Projekt habe ich soeben frei konfigurierbare Steuerung eingebaut, was an sich auch wunderbar funktioniert. Allerdings funktioniert die Darstellung der Konfiguration nicht so wie ich es gerne hätte. Beim Knopfdruck empfängt und speichert der GM immer rohe Keycodes und nun stehen auf dem Optionsschirm nichtssagende Zahlen. Etwa "37" anstelle von "Pfeil Links". Hat jemand eine Idee wie ich diese schnell und einfach zu lesbaren Begriffen übersetzt kriege?
Keycodes automatisch übersetzen lassen?
- GM 8
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
-
-
Mittels "chr()" kannst du zumindest die einzelnen Zeichen wiedergeben. Sondertasten wie Strg, Alt und Pfeiltasten musste wohl gesondert abfragen.
-
Mit diesem Code sollte es möglich sein(nicht alle Tasten sind angegeben):
GML-Quellcode
- if argument0=13 then
- {
- return("Enter")
- } else if argument0=32 then
- {
- return("Leertaste")
- } else if argument0=37 then
- {
- return("Pfeil links")
- } else if argument0=38 then
- {
- return("Pfeil hoch")
- } else if argument0=39 then
- {
- return("Pfeil rechts")
- } else if argument0=40 then
- {
- return("Pfeil runter")
- } else if argument0=96 then
- {
- return("Keypad0")
- } else if argument0=97 then
- {
- return("Keypad1")
- } else if argument0=98 then
- {
- return("Keypad2")
- } else if argument0=99 then
- {
- return("Keypad3")
- } else if argument0=100 then
- {
- return("Keypad4")
- } else if argument0=101 then
- {
- return("Keypad5")
- } else if argument0=102 then
- {
- return("Keypad6")
- } else if argument0=103 then
- {
- return("Keypad7")
- } else if argument0=104 then
- {
- return("Keypad8")
- } else if argument0=105 then
- {
- return("Numpad9")
- } else if argument0=107 then
- {
- return("Keypad+")
- } else if argument0=109 then
- {
- return("Keypad-")
- } else if argument0=186 then
- {
- return("Ü")
- } else if argument0=192 then
- {
- return("Ö")
- } else if argument0=222 then
- {
- return("Ä")
- }
- else
- {
- return(chr(argument0))
- }
FG
andre111 -
Cool, auf die Idee mit "chr()" war ich nicht gekommen. Das machts natürlich deutlich einfacher. Danke.
-
Das hätte man viel einfacher mit einem Switch machen können und ist vieleicht sogar etwas schneller.
Naja ich hab mal mir die Zeit genommen alle tasten anzugeben + sondertasten(play/stop)
GML-Quellcode
- switch(argument0)
- {
- case 0: return("No Key");break;
- case 8: return("Backspace");break;
- case 13: return("Enter");break;
- case 16: return("Shift");break;
- case 17: return("Strg");break;
- case 18: return("Alt");break;
- case 19: return("Pause");break;
- case 20: return("Umschalt");break;
- case 27: return("Esc");break;
- case 32: return("Leertaste");break;
- case 33: return("Bild hoch");break;
- case 34: return("Bild runter");break;
- case 35: return("Ende");break;
- case 36: return("Pos1");break;
- case 37: return("Pfeil links");break;
- case 38: return("Pfeil oben");break;
- case 39: return("Pfeil rechts");break;
- case 40: return("Pfeil unten");break;
- case 45: return("Einfg");break;
- case 109: return("Keypad Einfg");break;
- case 46: return("Entf");break;
- case 93: return("Menue");break;
- case 97: return("Keypad 0");break;
- case 98: return("Keypad 1");break;
- case 99: return("Keypad 2");break;
- case 100: return("Keypad 3");break;
- case 101: return("Keypad 4");break;
- case 102: return("Keypad 5");break;
- case 103: return("Keypad 6");break;
- case 104: return("Keypad 7");break;
- case 105: return("Keypad 8");break;
- case 106: return("Keypad 9");break;
- case 107: return("Keypad +");break;
- case 109: return("Keypad -");break;
- case 110: return("Keypad Entf");break;
- case 112: return("F1");break;
- case 113: return("F2");break;
- case 114: return("F3");break;
- case 115: return("F4");break;
- case 116: return("F5");break;
- case 117: return("F6");break;
- case 118: return("F7");break;
- case 119: return("F8");break;
- case 120: return("F9");break;
- case 121: return("F10");break;
- case 122: return("F11");break;
- case 123: return("F12");break;
- case 145: return("Rollen");break;
- case 174: return("Volume down");break;
- case 175: return("Volume up");break;
- case 179: return("Play/Stop");break;
- case 186: return("Ü");break;
- case 192: return("Ö");break;
- case 222: return("Ä");break;
- default: return(chr(argument0));
- }
-
-
Danke nochmal. Ich habe es dann auch mit nem Switch gelöst, allerdings musste ich da viel austauschen, da unser Spiel auf Englisch ist. Außerdem fehlten einige Tasten völlig. So sieht die Übersetzungsfunktion nun aus (bin noch nicht komplett sicher was die Vollständigkeit und Richtigkeit angeht, aber soweit ich es getestet habe scheint es zu stimmen):
GML-Quellcode
- switch(argument0)
- {
- case 0: return("No Key")
- case 8: return("Backspace")
- case 9: return("Tab")
- case 13: return("Enter")
- case 16: return("Shift")
- case 17: return("Ctrl")
- case 18: return("Alt")
- case 19: return("Pause/Break")
- case 20: return("Caps Lock")
- case 27: return("Esc")
- case 32: return("Space")
- case 33: return("Page Up")
- case 34: return("Page Down")
- case 35: return("End")
- case 36: return("Home")
- case 37: return("Left Arrow")
- case 38: return("Up Arrow")
- case 39: return("Right Arrow")
- case 40: return("Down Arrow")
- case 45: return("Insert")
- case 46: return("Delete")
- case 91: return("Left Window Key")
- case 92: return("Right Window Key")
- case 93: return("Select Key")
- case 96: return("Numpad 0")
- case 97: return("Numpad 1")
- case 98: return("Numpad 2")
- case 99: return("Numpad 3")
- case 100: return("Numpad 4")
- case 101: return("Numpad 5")
- case 102: return("Numpad 6")
- case 103: return("Numpad 7")
- case 104: return("Numpad 8")
- case 105: return("Numpad 9")
- case 106: return("Numpad *")
- case 107: return("Numpad +")
- case 109: return("Numpad -")
- case 110: return("Numpad ,")
- case 111: return("Numpad /")
- case 112: return("F1")
- case 113: return("F2")
- case 114: return("F3")
- case 115: return("F4")
- case 116: return("F5")
- case 117: return("F6")
- case 118: return("F7")
- case 119: return("F8")
- case 120: return("F9")
- case 121: return("F10")
- case 122: return("F11")
- case 123: return("F12")
- case 144: return("Num Lock")
- case 145: return("Scroll Lock")
- case 174: return("Volume down")
- case 175: return("Volume up")
- case 179: return("Play/Stop")
- case 186: return(";")
- case 187: return("=")
- case 188: return(",")
- case 189: return("-")
- case 190: return(".")
- case 191: return("/")
- case 192: return("~")
- case 219: return("[")
- case 220: return("\")
- case 221: return("]")
- case 222: return("'")
- default: return(chr(argument0));
- }
-
Als Alternative zum switch könntest du auch ein Array verwendet, welches jedem Code die Bezeichnung zuordnet. Also z.B.
Dieses Script brauchst du nur einmal zu Beginn aufrufen und kannst dann einfach mit
den Namen abfragen. Das sollte noch schneller sein als mit switch. Um dir die Schreibarbeit bei z.B. A-Z zu ersparen kannst du
verwenden. Was die Vollständigkeit betrifft, würde ich auf Nummer sicher gehen und für alle Codes, für die du keine Bezeichnung angegeben hast, sowas wie "Unknown Key" zurückgeben. Dazu ergänzend zu obigem Script einfach
nach der globalvar Deklaration einfügen. Damit haben automatisch alle Codes, denen du nicht explizit einen Namen zuweist, den Standardnamen.
Deine jetzige Lösung funktioniert natürlich auch (bis auf eventuelle Codes, die in den default-Fall laufen aber keine darstellbaren Zeichen sind).