SDL_keysym

Name

SDL_keysym --  キーシンボルの構造体

Structure Definition

typedef struct{
  Uint8 scancode;
  SDLKey sym;
  SDLMod mod;
  Uint16 unicode;
} SDL_keysym;

Structure Data

scancode ハードウェア特有のスキャンコード
sym SDL の仮想キーシンボル
mod 現在のキーモディファイア
unicode 変換された文字

Description

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;
    .
    .
    .
  }
}
.
.
modSDL_GetModState で説明されたようにキーボードモディファイアの現在の状態を格納します。 unicodeSDL_EnableUNICODE によって UNICODE 変換が有効にされた時にのみ使用されます。 unicode が 0 でない場合、 これは キーの押下に対応する UNICODE 文字です。 文字の上位 9 ビットが 0 の場合は、同等の ASCII 文字に変換します。

char ch;
if ( (keysym.unicode & 0xFF80) == 0 ) {
  ch = keysym.unicode & 0x7F;
}
else {
  printf("非ASCII文字です\n");
}
UNICODE 変換にはわずかなオーバーヘッドがありますので、 必要のない場合は有効にしないで下さい。

See Also

SDLKey