typedef struct{
Uint8 scancode;
SDLKey sym;
SDLMod mod;
Uint16 unicode;
} SDL_keysym;SDL_keysym 構造体は SDL_KeyboardEvent の一部なので、 キーの押す・離すを報告するときに使用されます。
scancode フィールドは一般にそのまま残されるべきで、 キーボードから返されるハードウェア依存のスキャンコードです。 sym フィールドは本当に有用で、 SDL で定義されたキーの値です。 (SDL Key Syms を見て下さい) 以下のように、このフィールドはあるキーが押されたことをチェックするときに とても役に立ちます。
.
.
while(SDL_PollEvent(&event)){
switch(event.type){
case SDL_KEYDOWN:
if(event.key.keysym.sym==SDLK_LEFT)
move_left();
break;
.
.
.
}
}
.
.
mod は
SDL_GetModState
で説明されたようにキーボードモディファイアの現在の状態を格納します。
unicode は
SDL_EnableUNICODE
によって UNICODE 変換が有効にされた時にのみ使用されます。
unicode が 0 でない場合、
これは キーの押下に対応する UNICODE 文字です。
文字の上位 9 ビットが 0 の場合は、同等の ASCII 文字に変換します。
char ch;
if ( (keysym.unicode & 0xFF80) == 0 ) {
ch = keysym.unicode & 0x7F;
}
else {
printf("非ASCII文字です\n");
}
UNICODE 変換にはわずかなオーバーヘッドがありますので、
必要のない場合は有効にしないで下さい。