La struttura SDL_Keysym
ha SDL_Scancode
e SDL_Keycode
membri. Qual'è la differenza tra loro? La documentazione in realtà non lo chiarisce per me. Ho provato entrambi e sembrano fare la stessa cosa.Qual è la differenza tra un codice di chiave fisica SDL e un codice di chiave virtuale SDL?
risposta
Vedere the SDL documentation. Gli Scancodes rappresentano la posizione fisica dei tasti, modellati su una tastiera QWERTY standard, mentre i Keycode sono i caratteri ottenuti premendo il tasto.
su una tastiera AZERTY, premendo Un emetterà un 'Q'
scancode e un 'a'
codice.
Generalmente, scancode s sono i veri valori emessi dalla tastiera (hardware) per il sistema operativo mentre il codice tasto è ciò che il sistema operativo/libreria associa a esso in base al layout scelto. Il layout decide la mappatura tra scancode su un codice di chiave virtuale. Fa parte delle impostazioni del sistema operativo. Qui, per il layout , intendo il layout funzionale; ci sono anche layout meccanici e visivi. Maggiori informazioni su keyboard layouts in Wikipedia. Il concetto di codice di scansione e chiave virtuale è explained better con l'illustrazione in MSDN.
Tuttavia, SDL utilizza scancode per indicare qualcosa di diverso: lo scancode della chiave nella tastiera QWERTY statunitense la cui posizione è la stessa di quella in questione. È il modo indipendente dal dispositivo di denotare una chiave in base alla sua posizione. Questo è sepolto in una posizione insolita in SDL's manual:
Scancodes sono pensati per essere indipendenti dal layout. Pensa a questo come "l'utente ha premuto il tasto Q come sarebbe su una tastiera QWERTY USA" a prescindere dal fatto che si tratti effettivamente di una tastiera europea o di una tastiera Dvorak o altro. Lo scancode è sempre la stessa posizione chiave.
I codici chiave devono essere dipendenti dal layout. Pensa a questo come "l'utente ha premuto il tasto con l'etichetta" Q "su una tastiera specifica."
Ad esempio, se si preme il tasto che si trova a due tasti a destra di BLOC MAIUSC su una tastiera QWERTY USA, verrà segnalato un codice scanza di SDL_SCANCODE_S e un codice chiave di SDLK_S. Lo stesso tasto su una tastiera di Dvorak, riporterà un codice di scansione di SDL_SCANCODE_S e un codice di accesso di SDLK_O.
Nella citazione precedente, per layout il manuale indica il layout funzionale. La main part delle tastiere per quanto riguarda manuale è una breve po 'su questo tema:
valori SDL_Scancode vengono utilizzati per rappresentare la posizione fisica di un tasto della tastiera sulla tastiera.
I valori del codice SDL_Key sono mappati al layout corrente della tastiera e correlati a un SDL_Scancode.
quale usare viene lasciata all'applicazione: scancodes sono adatte in situazioni in cui i controlli sono la layout-dipendente (ad esempio, i tasti "WASD" come mancino tasti freccia.), Mentre keycodes sono più adatti a situazioni in cui i controlli sono dipendenti dal carattere (ad esempio il tasto "I" per Inventory).
Nella citazione precedente, per layout il manuale indica il layout meccanico/fisico. Quindi, per il controllo del personaggio, ad esempio, è preferibile utilizzare lo scancode, mentre per la ricezione del codice utente il keycode è migliore.
Stavo parlando dei codici di scansione tradizionali e sembra che SDL abbia usato quel termine per indicare qualcos'altro. Quindi sì, il tuo è stato corretto fino in fondo. Ho risolto la mia risposta per riflettere questo. Grazie per aver chiesto pazientemente di indicarmi la giusta direzione e di farmi capire questo. – legends2k
@ legends2k Pensavo di essere stato rettificato, ahah! Bene, grazie * * per la conferma comunque :) – Quentin