Die Struktur SDL_Keysym
hat SDL_Scancode
und SDL_Keycode
Mitglieder. Was ist der Unterschied zwischen ihnen? Die Dokumentation klärt das nicht wirklich auf. Ich habe beides versucht und sie scheinen dasselbe zu tun.
Siehe die SDL-Dokumentation . Scancodes stellen die physikalische Position der Tasten dar, die einer Standard-QWERTZ-Tastatur nachempfunden sind, während Tastencodes das Zeichen sind, das durch Drücken der Taste erhalten wird.
Wenn Sie auf einer AZERTY-Tastatur A drücken, wird ein 'Q'
scancode und ein 'a'
keycode ausgegeben.
Im Allgemeinen sind Scancode die wahren Werte, die von der Tastatur (Hardware) an das Betriebssystem ausgegeben werden, während der Schlüsselcode das ist OS / library ordnet es basierend auf dem gewählten Layout zu. Das Layout entscheidet über die Zuordnung zwischen Scancode und virtuellem Schlüsselcode. Es ist Teil der Einstellungen des Betriebssystems. Hier, nach Layout , meine ich das funktionale Layout; Es gibt auch mechanische und visuelle Layouts. Lesen Sie mehr über Tastaturlayouts in Wikipedia. Das Konzept von Scan-Code und virtuellem Schlüssel ist erklärt besser mit Abbildung in MSDN.
SDL verwendet jedoch scancode , um etwas anderes zu bedeuten: den Scancode des Schlüssels der amerikanischen QWERTY-Tastatur, dessen Position derselbe ist wie der fragliche. Es ist die geräteunabhängige Art, einen Schlüssel basierend auf seinem Standort zu bezeichnen. Dies ist an einem ungewöhnlichen Ort im SDL-Handbuch versteckt:
Scancodes sollen layoutunabhängig sein. Stellen Sie sich Folgendes vor: "Der Benutzer hat die Q-Taste wie bei einer US-QWERTZ-Tastatur gedrückt", unabhängig davon, ob es sich um eine europäische Tastatur oder eine Dvorak-Tastatur handelt. Der Scancode hat immer die gleiche Schlüsselposition.
Keycodes sind Layout-abhängig. Stellen Sie sich Folgendes vor: "Der Benutzer hat die Taste mit der Beschriftung" Q "auf einer bestimmten Tastatur gedrückt."
Wenn Sie zum Beispiel die Taste drücken, bei der es sich um zwei Tasten rechts neben FESTSTELLTASTE auf einer US-QWERTY-Tastatur handelt, wird ein Scancode von SDL_SCANCODE_S und ein Schlüsselcode von SDLK_S gemeldet. Derselbe Schlüssel auf einer Dvorak-Tastatur meldet einen Scancode von SDL_SCANCODE_S und einen Schlüsselcode von SDLK_O.
Im obigen Zitat bedeutet Layout nach Layout das funktionale Layout. Der Hauptteil des Handbuchs zu Tastaturen ist ein bisschen kurz zu diesem Thema:
SDL_Scancode-Werte werden verwendet, um den physischen Speicherort einer Tastaturtaste auf der Tastatur darzustellen.
SDL_Keycode-Werte werden dem aktuellen Layout der Tastatur zugeordnet und entsprechen einem SDL_Scancode.
Welcher zu verwenden ist, bleibt der Anwendung überlassen: Scancodes eignen sich in Situationen, in denen Steuerungen layoutabhängig sind (z. B. die "WASD" -Tasten als Linkshänderpfeile), während Keycodes besser für Situationen geeignet sind, in denen Steuerelemente vorhanden sind zeichenabhängig (zB der "I" -Schlüssel für Inventar).
Im obigen Zitat bedeutet Layout nach Layout das mechanische / physische Layout. So ist zum Beispiel zur Kontrolle des Charakters der Scancode besser, während zum Empfang des Usernamens der Keycode besser ist.