キーボードの入力
SDLでキーボードの入力を取得するには、「SDL_GetKeyboardState関数」を使用します。
SDL_GetKeyboardState関数
キーボードの入力状態を取得します。
宣言
const Uint8* SDL_GetKeyboardState( int* numkeys );
引数
numkeys | キーの数( 戻り値の配列の長さ )を代入するための変数のアドレスです。 この値が不要な場合には、 NULL を指定します。 |
戻り値
「各キーの入力状態を表す配列のアドレス」を返します。要素の値が「1
」の場合はそのキーを押しており、「0
」の場合は押していない状態を表します。配列の添え字には、SDL_Scancode
型の値を使用できます。
この配列のアドレスは、アプリケーションの実行中は常に有効です。また、配列の要素はイベントを処理する時に更新されるため、この関数( SDL_GetKeyboardState
関数 )を何度も呼び出す必要はありません。
サンプルプログラム
#include <SDL.h>
int main( int argc, char* argv[] )
{
if ( SDL_Init( SDL_INIT_VIDEO ) != 0 )
{
SDL_Log( u8"SDLの初期化処理に失敗しました。エラーメッセージ: %s", SDL_GetError() );
return -1;
}
auto window = SDL_CreateWindow(
u8"サンプル",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
1280,
720,
0
);
if ( window == nullptr )
{
SDL_Log( u8"ウィンドウの作成に失敗しました。エラーメッセージ: %s", SDL_GetError() );
SDL_Quit();
return -1;
}
auto is_finished = false;
auto key_count = 0;
auto key_state = SDL_GetKeyboardState( &key_count );
SDL_Log( u8"キーの数: %d", key_count );
while ( !is_finished )
{
auto event_info = SDL_Event();
while ( SDL_PollEvent( &event_info ) == 1 )
{
if ( event_info.type == SDL_QUIT ) is_finished = true;
}
if ( key_state[ SDL_SCANCODE_ESCAPE ] == 1 ) is_finished = true;
}
SDL_DestroyWindow( window );
SDL_Quit();
return 0;
}