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表征的鍵盤修飾鍵的當前狀態。僅當通過SDL_EnableUNICODE允許UNICODE轉換時,才使用unicode。若unicode非零,則它是一個與按鍵一致的UNICODE字符。若字符最高的9位都是0,則將其映射為等效的ASCII字符:
char ch; if ( (keysym.unicode & 0xFF80) == 0 ) { ch = keysym.unicode & 0x7F; } else { printf("是一個國際化字符。"); }
因為UNICODE轉換會有一點開銷,所以除非需要,否則不要開啟。
2010年6月15日