Uint32 | type | イベントの種類, このフィールドは全種類のイベントで共用している |
SDL_CommonEvent | common | 共通イベントの情報 |
SDL_DisplayEvent | window | ディスプレイイベントの情報 |
SDL_WindowEvent | window | ウィンドウイベントの情報 |
SDL_KeyboardEvent | key | キーボードイベントの情報 |
SDL_TextEditingEvent | edit | テキスト編集イベントの情報 |
SDL_TextInputEvent | text | テキスト入力イベントの情報 |
SDL_MouseMotionEvent | motion | マウス移動イベントの情報 |
SDL_MouseButtonEvent | button | マウスボタンイベントの情報 |
SDL_MouseWheelEvent | wheel | マウスホイールイベントの情報 |
SDL_JoyAxisEvent | jaxis | ジョイスティック軸イベントの情報 |
SDL_JoyBallEvent | jball | ジョイスティックボールイベントの情報 |
SDL_JoyHatEvent | jhat | ジョイスティックハットイベントの情報 |
SDL_JoyButtonEvent | jbutton | ジョイスティックボタンイベントの情報 |
SDL_JoyDeviceEvent | jdevice | ジョイスティック接続イベントの情報 |
SDL_ControllerAxisEvent | caxis | ゲームコントローラー軸イベントの情報 |
SDL_ControllerButtonEvent | cbutton | ゲームコントローラーボタンイベントの情報 |
SDL_ControllerDeviceEvent | cdevice | ゲームコントローラー接続イベントの情報 |
SDL_AudioDeviceEvent | adevice | オーディオデバイスイベントの情報 (SDL 2.0.4以降) |
SDL_QuitEvent | quit | 終了要求イベントの情報 |
SDL_UserEvent | user | アプリケーション定義イベントの情報 |
SDL_SysWMEvent | syswm | システム依存ウィンドウイベントの情報 |
SDL_TouchFingerEvent | tfinger | タッチイベントの情報 |
SDL_MultiGestureEvent | mgesture | マルチタッチジェスチャーイベントの情報 |
SDL_DollarGestureEvent | dgesture | 複雑なジェスチャーイベントの情報 |
SDL_DropEvent | drop | ドラッグ&ドロップイベントの情報 |
SDL_Eventは全てのSDLイベント処理の中核で, SDLで使われる全てのイベント構造体の共用体である. どのイベントがどの共用体のメンバに対応しているかを知るのは簡単である. 後の表にその関係がある.
SDL_Eventには2つの使い方があるSDL_PollEvent()またはSDL_PeepEvents()でキューからイベントを得られる. SDL_PollEvent()を例に説明する.
まず始めに, 空のSDL_Eventを生成する.
SDL_Event test_event;
SDL_PollEvent()はイベントを読み込み, キューから削除する. もしキューにイベントがなければ0を, あれば1を戻す. whileループを使い, 全てのイベントを処理する.
while (SDL_PollEvent(&test_event)) {
SDL_PollEvent()は引数のSDL_Eventへのポインタにイベント情報を代入する. SDL_PollEvent()はイベントをキューから取り除き, その後test_eventに書き込む. しかし, test_eventのtypeメンバにはイベントの種類も書き込まれている. よって, 種類に応じてイベントを処理するためにはswitch文を使う.
switch (test_event.type) {
得られたイベントが何であるか, そしてそのイベントの種類は何であるかを知る必要がある. ここでは, アプリケーションでユーザがマウスを動かしたことを検知したいと想定する. イベント種類を見渡すと, SDL_MOUSEMOTIONに気がつく. これが探しているイベントだろう. 後の表を見ると, SDL_MOUSEMOTIONイベントはSDL_EventのメンバのSDL_MouseMotionEventで処理することが分かる. SDL_MOUSEMOTIONのイベントの種類はswitch文の内部で次のようにチェックできる.
case SDL_MOUSEMOTION:
test_eventのmotionメンバの情報を全て表示したいとすると
printf("マウス移動イベントを得た.¥n");
printf("現在の位置は(%d, %d)¥n", test_event.motion.x, test_event.motion.y);
break;
default:
printf("処理されないイベント!¥n");
break;
}
}
printf("イベントキューは空.¥n");
SDL_Event user_event;
user_event.type = SDL_USEREVENT;
user_event.user.code = 2;
user_event.user.data1 = NULL;
user_event.user.data2 = NULL;
SDL_PushEvent(&user_event);
イベントの種類(typeメンバ) | イベント構造体 | SDL_Eventフィールド |
---|---|---|
SDL_AUDIODEVICEADDED SDL_AUDIODEVICEREMOVED | SDL_AudioDeviceEvent | adevice |
SDL_CONTROLLERAXISMOTION | SDL_ControllerAxisEvent | caxis |
SDL_CONTROLLERBUTTONDOWN SDL_CONTROLLERBUTTONUP | SDL_ControllerButtonEvent | cbutton |
SDL_CONTROLLERDEVICEADDED SDL_CONTROLLERDEVICEREMOVED SDL_CONTROLLERDEVICEREMAPPED | SDL_ControllerDeviceEvent | cdevice |
SDL_DOLLARGESTURE SDL_DOLLARRECORD | SDL_DollarGestureEvent | dgesture |
SDL_DROPFILE SDL_DROPTEXT SDL_DROPBEGIN SDL_DROPCOMPLETE | SDL_DropEvent | drop |
SDL_FINGERMOTION SDL_FINGERDOWN SDL_FINGERUP | SDL_TouchFingerEvent | tfinger |
SDL_KEYDOWN SDL_KEYUP | SDL_KeyboardEvent | key |
SDL_JOYAXISMOTION | SDL_JoyAxisEvent | jaxis |
SDL_JOYBALLMOTION | SDL_JoyBallEvent | jball |
SDL_JOYHATMOTION | SDL_JoyHatEvent | jhat |
SDL_JOYBUTTONDOWN SDL_JOYBUTTONUP | SDL_JoyButtonEvent | jbutton |
SDL_JOYDEVICEADDED SDL_JOYDEVICEREMOVED | SDL_JoyDeviceEvent | jdevice |
SDL_MOUSEMOTION | SDL_MouseMotionEvent | motion |
SDL_MOUSEBUTTONDOWN SDL_MOUSEBUTTONUP | SDL_MouseButtonEvent | button |
SDL_MOUSEWHEEL | SDL_MouseWheelEvent | wheel |
SDL_MULTIGESTURE | SDL_MultiGestureEvent | mgesture |
SDL_QUIT | SDL_QuitEvent | quit |
SDL_SYSWMEVENT | SDL_SysWMEvent | syswm |
SDL_TEXTEDITING | SDL_TextEditingEvent | edit |
SDL_TEXTINPUT | SDL_TextInputEvent | text |
SDL_USEREVENT | SDL_UserEvent | user |
SDL_WINDOWEVENT | SDL_WindowEvent | window |
その他のイベント | SDL_CommonEvent | なし. typeフィールドを使うこと |