目次 - API(機能別) - イベント処理 - SDL_EventType

SDL_EventType

送られたイベントの種類の列挙体

SDL_FIRSTEVENT(未使用)
アプリケーションのイベント
SDL_QUITユーザが終了を要求した (詳細を参照すること)
Android, iOS, WinRTのイベント (詳細を参照すること)
SDL_APP_TERMINATINGOSがアプリケーションを終了させようとしている
SDL_APP_LOWMEMORY空きメモリが少ない. 何かを解放する必要がある
SDL_APP_WILLENTERBACKGROUNDアプリケーションが裏側へ回ろうとしている
SDL_APP_DIDENTERBACKGROUNDアプリケーションが裏側へ回った
SDL_APP_WILLENTERFOREGROUNDアプリケーションが表へ現れようとしている
SDL_APP_DIDENTERFOREGROUNDアプリケーションが表へ現れた
ウィンドウのイベント
SDL_WINDOWEVENTウィンドウの状態が変わった
SDL_SYSWMEVENTシステム固有のイベントが発生した
キーボードのイベント
SDL_KEYDOWNキーが押された
SDL_KEYUPキーが離された
SDL_TEXTEDITINGキーボードでテキストを編集している
SDL_TEXTINPUTキーボードでテキストが入力された
SDL_KEYMAPCHANGED入力言語やキーボードレイアウトの変更のようなシステムイベントが原因でキーマップが変わった (SDL 2.0.4以降)
マウスのイベント
SDL_MOUSEMOTIONマウスが動いた
SDL_MOUSEBUTTONDOWNマウスのボタンが押された
SDL_MOUSEBUTTONUPマウスのボタンが離された
SDL_MOUSEWHEELマウスのホイールが動いた
ジョイスティックのイベント
SDL_JOYAXISMOTIONジョイスティクが動いた
SDL_JOYBALLMOTIONジョイスティクのトラックボールが動いた
SDL_JOYHATMOTIONジョイスティックのハットが変わった
SDL_JOYBUTTONDOWNジョイスティックのボタンが押された
SDL_JOYBUTTONUPジョイスティックのボタンが離された
SDL_JOYDEVICEADDEDジョイスティックが接続された
SDL_JOYDEVICEREMOVEDジョイスティックが切断された
コントローラーのイベント
SDL_CONTROLLERAXISMOTIONコントローラーが動いた
SDL_CONTROLLERBUTTONDOWNコントローラーのボタンが押された
SDL_CONTROLLERBUTTONUPコントローラーのボタンが離された
SDL_CONTROLLERDEVICEADDEDコントローラーが接続された
SDL_CONTROLLERDEVICEREMOVEDコントローラーが切断された
SDL_CONTROLLERDEVICEREMAPPEDコントローラーのマッピングが変わった
タッチのイベント
SDL_FINGERDOWNデバイスに指をつけた
SDL_FINGERUPデバイスから指を離した
SDL_FINGERMOTIONデバイス上で指を動かした
ジェスチャーのイベント
SDL_DOLLARGESTURE
SDL_DOLLARRECORD
SDL_MULTIGESTURE
クリップボードのイベント
SDL_CLIPBOARDUPDATEクリップボードが変わった
ドラッグ&ドロップのイベント
SDL_DROPFILEファイルをドロップした
SDL_DROPTEXTtext/plainのドラッグアンドドロップイベント (SDL 2.0.5以降)
SDL_DROPBEGIN新しいグループのドロップが始まった (SDL 2.0.5以降)
SDL_DROPCOMPLETE現在のグループのドロップが終わった (SDL 2.0.5以降)
オーディオホットプラグ(活線挿抜)のイベント
SDL_AUDIODEVICEADDEDオーディオデバイスが新たに接続された (SDL 2.0.4以降)
SDL_AUDIODEVICEREMOVEDオーディオデバイスが取り除かれた (SDL 2.0.4以降)
レンダラのイベント
SDL_RENDER_TARGETS_RESETレンダラの対象がリセットされコンテキストを更新する必要がある (SDL2.0.2以降)
SDL_RENDER_DEVICE_RESETデバイスがリセットされ全てのテクスチャを再生成する必要がある (SDL2.0.4以降)
ユーザ定義のイベント SDL_RegisterEvents()で確保する必要がある
SDL_USEREVENTユーザ固有のイベント
SDL_LASTEVENT内部の配列の終端のみのため

サンプルコード

SDL_Event e;
while (SDL_PollEvent(&e)) {
    if (e.type == SDL_KEYDOWN) {
        SDL_Log("ユーザがキーを押した!");
    }
}

詳細

SDL_QUIT

SDL_QUITイベントは様々な理由で発生する. アプリケーションはこのイベントを無視するという選択もありうる. 例えば, 作業中のデータを保存するかをユーザに尋ねたいとき等である.

SQL_QUITはユーザが最後のウィンドウの閉じるボタンを押したときに発生する. このことにより, 追加でSDL_WINDOWEVENT/SDL_WINDOWEVENT_CLOSEイベントが発生する. アプリケーションはどちらか, あるいは両方でチェックでき, またはチェックしないこともできる. アプリケーションがSQL_QUITを無視して別のウィンドウを生成した場合, ユーザが次に最後のウィンドウの閉じるボタンを押すと再びSQL_QUITイベントが送られる.

SQL_QUITはウィンドウを閉じようとしたときだけ発生するとは限らない. Mac OS X では, Command-Q (「アプリケーションを終了する」標準的なショートカット) を押すと, SQLはウィンドウの存在に関わらずSQL_QUITイベントを発生させる. しかし, 依然としてアプリケーションは自分自身を適切に終了させる必要がある. アプリケーションが完全に Command-Q を無視すると, Mac App Store の審査を通らないだろう.

POSIXシステムでは, SDL_InitはSIGINT(キーボード割り込み)とSIGTERM(システム終了要求)のシグナルハンドラを設定する. もし, まだハンドラが存在しなくても, SQL_QUITイベントは発生する. SQL_QUITイベントが発生しないようにする方法はない. しかし, アプリケーションでシグナルハンドラを設定すると, シグナル発生時の終了イベントの発生が上書きされる.

Android, iOS, WinRTのイベント

「Android, iOS, WinRTのイベント」に分類されるのは, 通常のデスクトップアプリケーションとは別の要求が存在するモバイルまたは組み込みデバイス用のイベントである. これらのイベントはイベントフィルタで処理する必要がある. OSは即時の反応を必要としていて, イベントを送信した後に短い時間でプロセスを終了させる. よって, もしSDLイベントキューで処理すると遅すぎるだろう. その他のイベントは通常のSDL_PollEvent()のループで処理できる. しかし, これらの特別なイベントにはSDL_SetEventFilter()を使いコールバックを設定するべきだ.

イベントは以下のように対応している
SDLイベント発生条件iOSAndroidWinRT
SDL_APP_TERMINATINGアプリケーションがOSによって終了されようとしているapplicationWillTerminate()onDestroy()Exiting()
SDL_APP_LOWMEMORYアプリケーションの空きメモリが少ない. 可能ならメモリを解放する必要があるapplicationDidReceiveMemoryWarning()onLowMemory()-
SDL_APP_WILLENTERBACKGROUNDアプリケーションが裏側へ回ろうとしているapplicationWillResignActive()onPause()Suspending()
SDL_APP_DIDENTERBACKGROUNDアプリケーションが裏側へ回った. CPU時間が割り当てられないかもしれないapplicationDidEnterBackground()onPause()Suspending()
SDL_APP_WILLENTERFOREGROUNDアプリケーションが前面に現れようとしているapplicationWillEnterForeground()onResume()Resuming()
SDL_APP_DIDENTERFOREGROUNDアプリケーションが前面に現れた. ユーザとの対話が可能になった.applicationDidBecomeActive()onResume()Resuming()

関連項目(構造体)

SDL_JoyAxisEvent
SDL_JoyBallEvent
SDL_JoyButtonEvent
SDL_JoyHatEvent
SDL_JoyDeviceEvent
SDL_ControllerAxisEvent
SDL_ControllerButtonEvent
SDL_ControllerDeviceEvent
SDL_KeyboardEvent
SDL_MouseButtonEvent
SDL_MouseMotionEvent
SDL_MouseWheelEvent
SDL_QuitEvent
SDL_SysWMEvent
SDL_TextEditingEvent
SDL_TextInputEvent
SDL_UserEvent
SDL_WindowEvent
SDL_DropEvent
SDL_AudioDeviceEvent
SDL_TouchFingerEvent
SDL_DollarGestureEvent
SDL_MultiGestureEvent

関連項目(関数)

SDL_PollEvent
SDL_SetEventFilter

SDL Wikiへのリンク

SDL_EventType - SDL Wiki