Was ist der Unterschied zwischen einem physischen SDL-Schlüsselcode und einem virtuellen SDL-Schlüsselcode?

9

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.

    
Low-in-Sky 11.08.2015, 12:10
quelle

2 Antworten

11

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.

    
Quentin 11.08.2015, 12:16
quelle
3

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.

    
legends2k 11.08.2015 12:34
quelle

Tags und Links