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

  • Keycodes automatisch übersetzen lassen?

    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?
  • Mit diesem Code sollte es möglich sein(nicht alle Tasten sind angegeben):

    GML-Quellcode

    1. if argument0=13 then
    2. {
    3. return("Enter")
    4. } else if argument0=32 then
    5. {
    6. return("Leertaste")
    7. } else if argument0=37 then
    8. {
    9. return("Pfeil links")
    10. } else if argument0=38 then
    11. {
    12. return("Pfeil hoch")
    13. } else if argument0=39 then
    14. {
    15. return("Pfeil rechts")
    16. } else if argument0=40 then
    17. {
    18. return("Pfeil runter")
    19. } else if argument0=96 then
    20. {
    21. return("Keypad0")
    22. } else if argument0=97 then
    23. {
    24. return("Keypad1")
    25. } else if argument0=98 then
    26. {
    27. return("Keypad2")
    28. } else if argument0=99 then
    29. {
    30. return("Keypad3")
    31. } else if argument0=100 then
    32. {
    33. return("Keypad4")
    34. } else if argument0=101 then
    35. {
    36. return("Keypad5")
    37. } else if argument0=102 then
    38. {
    39. return("Keypad6")
    40. } else if argument0=103 then
    41. {
    42. return("Keypad7")
    43. } else if argument0=104 then
    44. {
    45. return("Keypad8")
    46. } else if argument0=105 then
    47. {
    48. return("Numpad9")
    49. } else if argument0=107 then
    50. {
    51. return("Keypad+")
    52. } else if argument0=109 then
    53. {
    54. return("Keypad-")
    55. } else if argument0=186 then
    56. {
    57. return("Ü")
    58. } else if argument0=192 then
    59. {
    60. return("Ö")
    61. } else if argument0=222 then
    62. {
    63. return("Ä")
    64. }
    65. else
    66. {
    67. return(chr(argument0))
    68. }
    Alles anzeigen


    FG
    andre111
  • 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

    1. switch(argument0)
    2. {
    3. case 0: return("No Key");break;
    4. case 8: return("Backspace");break;
    5. case 13: return("Enter");break;
    6. case 16: return("Shift");break;
    7. case 17: return("Strg");break;
    8. case 18: return("Alt");break;
    9. case 19: return("Pause");break;
    10. case 20: return("Umschalt");break;
    11. case 27: return("Esc");break;
    12. case 32: return("Leertaste");break;
    13. case 33: return("Bild hoch");break;
    14. case 34: return("Bild runter");break;
    15. case 35: return("Ende");break;
    16. case 36: return("Pos1");break;
    17. case 37: return("Pfeil links");break;
    18. case 38: return("Pfeil oben");break;
    19. case 39: return("Pfeil rechts");break;
    20. case 40: return("Pfeil unten");break;
    21. case 45: return("Einfg");break;
    22. case 109: return("Keypad Einfg");break;
    23. case 46: return("Entf");break;
    24. case 93: return("Menue");break;
    25. case 97: return("Keypad 0");break;
    26. case 98: return("Keypad 1");break;
    27. case 99: return("Keypad 2");break;
    28. case 100: return("Keypad 3");break;
    29. case 101: return("Keypad 4");break;
    30. case 102: return("Keypad 5");break;
    31. case 103: return("Keypad 6");break;
    32. case 104: return("Keypad 7");break;
    33. case 105: return("Keypad 8");break;
    34. case 106: return("Keypad 9");break;
    35. case 107: return("Keypad +");break;
    36. case 109: return("Keypad -");break;
    37. case 110: return("Keypad Entf");break;
    38. case 112: return("F1");break;
    39. case 113: return("F2");break;
    40. case 114: return("F3");break;
    41. case 115: return("F4");break;
    42. case 116: return("F5");break;
    43. case 117: return("F6");break;
    44. case 118: return("F7");break;
    45. case 119: return("F8");break;
    46. case 120: return("F9");break;
    47. case 121: return("F10");break;
    48. case 122: return("F11");break;
    49. case 123: return("F12");break;
    50. case 145: return("Rollen");break;
    51. case 174: return("Volume down");break;
    52. case 175: return("Volume up");break;
    53. case 179: return("Play/Stop");break;
    54. case 186: return("Ü");break;
    55. case 192: return("Ö");break;
    56. case 222: return("Ä");break;
    57. default: return(chr(argument0));
    58. }
    Alles anzeigen

  • 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

    1. switch(argument0)
    2. {
    3. case 0: return("No Key")
    4. case 8: return("Backspace")
    5. case 9: return("Tab")
    6. case 13: return("Enter")
    7. case 16: return("Shift")
    8. case 17: return("Ctrl")
    9. case 18: return("Alt")
    10. case 19: return("Pause/Break")
    11. case 20: return("Caps Lock")
    12. case 27: return("Esc")
    13. case 32: return("Space")
    14. case 33: return("Page Up")
    15. case 34: return("Page Down")
    16. case 35: return("End")
    17. case 36: return("Home")
    18. case 37: return("Left Arrow")
    19. case 38: return("Up Arrow")
    20. case 39: return("Right Arrow")
    21. case 40: return("Down Arrow")
    22. case 45: return("Insert")
    23. case 46: return("Delete")
    24. case 91: return("Left Window Key")
    25. case 92: return("Right Window Key")
    26. case 93: return("Select Key")
    27. case 96: return("Numpad 0")
    28. case 97: return("Numpad 1")
    29. case 98: return("Numpad 2")
    30. case 99: return("Numpad 3")
    31. case 100: return("Numpad 4")
    32. case 101: return("Numpad 5")
    33. case 102: return("Numpad 6")
    34. case 103: return("Numpad 7")
    35. case 104: return("Numpad 8")
    36. case 105: return("Numpad 9")
    37. case 106: return("Numpad *")
    38. case 107: return("Numpad +")
    39. case 109: return("Numpad -")
    40. case 110: return("Numpad ,")
    41. case 111: return("Numpad /")
    42. case 112: return("F1")
    43. case 113: return("F2")
    44. case 114: return("F3")
    45. case 115: return("F4")
    46. case 116: return("F5")
    47. case 117: return("F6")
    48. case 118: return("F7")
    49. case 119: return("F8")
    50. case 120: return("F9")
    51. case 121: return("F10")
    52. case 122: return("F11")
    53. case 123: return("F12")
    54. case 144: return("Num Lock")
    55. case 145: return("Scroll Lock")
    56. case 174: return("Volume down")
    57. case 175: return("Volume up")
    58. case 179: return("Play/Stop")
    59. case 186: return(";")
    60. case 187: return("=")
    61. case 188: return(",")
    62. case 189: return("-")
    63. case 190: return(".")
    64. case 191: return("/")
    65. case 192: return("~")
    66. case 219: return("[")
    67. case 220: return("\")
    68. case 221: return("]")
    69. case 222: return("'")
    70. default: return(chr(argument0));
    71. }
    Alles anzeigen
  • Als Alternative zum switch könntest du auch ein Array verwendet, welches jedem Code die Bezeichnung zuordnet. Also z.B.

    GML-Quellcode

    1. globalvar key_name;
    2. key_name[0] = "No Key";
    3. key_name[8] = "Backspace";
    4. key_name[9] = "Tab";
    5. key_name[13] = "Enter";
    6. key_name[16] = "Shift";
    7. ...

    Dieses Script brauchst du nur einmal zu Beginn aufrufen und kannst dann einfach mit

    GML-Quellcode

    1. return key_name[argument0];

    den Namen abfragen. Das sollte noch schneller sein als mit switch. Um dir die Schreibarbeit bei z.B. A-Z zu ersparen kannst du

    GML-Quellcode

    1. for (i = ord('A'); i <= ord('Z'); i += 1) {
    2. key_name[i] = chr(i);
    3. }

    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

    GML-Quellcode

    1. for (i = 0; i < 256; i += 1) {
    2. key_name[i] = "Unknown Key";
    3. }

    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).
  • Benutzer online 1

    1 Besucher