2015-08-11 12 views

risposta

11

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.

+0

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

+0

@ legends2k Pensavo di essere stato rettificato, ahah! Bene, grazie * * per la conferma comunque :) – Quentin

3

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.

Problemi correlati