イベントを取得する。
ユーザーから何らかのアクションがあった場合、イベントという形で、プログラムの中に溜め込まれる。
そのイベントを取得するのがこの関数の役割。
int SDL_PollEvent(SDL_Event *event);
イベントがある場合(なんらかのアクションがあった場合)、1が返る。それ以外の場合は0が返る。
1が返ってきたときに、eventの中身を解析して処理を行うようにする。
なお、SDL_Eventは共用体であり、次の定義となっている。
typedef union{
Uint8 type;
SDL_ActiveEvent active;
SDL_KeyboardEvent key;
SDL_MouseMotionEvent motion;
SDL_MouseButtonEvent button;
SDL_JoyAxisEvent jaxis;
SDL_JoyBallEvent jball;
SDL_JoyHatEvent jhat;
SDL_JoyButtonEvent jbutton;
SDL_ResizeEvent resize;
SDL_ExposeEvent expose;
SDL_QuitEvent quit;
SDL_UserEvent user;
SDL_SysWMEvent syswm;
} SDL_Event;
詳細は別のページで記述することにする。
イベントの種類は、typeで判断する。
| type | 説明 |
|---|---|
| SDL_ACTIVEEVENT | ウインドウがアクティブになったときのイベント |
| SDL_KEYDOWN/UP | キーアップ/ダウンイベント |
| SDL_MOUSEMOTION | マウスが動いたときのイベント |
| SDL_MOUSEBUTTONDOWN/UP | マウスのボタンを押す/離すイベント |
| SDL_JOYAXISMOTION | ジョイスティック(ゲームコントローラー)のイベント |
| SDL_JOYBALLMOTION | |
| SDL_JOYHATMOTION | |
| SDL_JOYBUTTONDOWN/UP | |
| SDL_VIDEORESIZE | 画面リサイズのイベント |
| SDL_VIDEOEXPOSE | 外部アプリケーションによる画面再描画のイベント |
| SDL_QUIT | ウインドウを閉じるときのイベント(ウインドウの「×ボタン」を押したときのイベント) |
| SDL_USEREVENT | ユーザーイベント |
| SDL_SYSWMEVENT | システムイベント |
#include <SDL/SDL.h>
int main(){
/* ビデオサーフェス */
SDL_Surface* videoSurface = NULL;
/* 背景色 */
Uint32 bgColor;
/* イベント共用体 */
SDL_Event event;
/* ループ終了フラグ */
int endFlag = 0;
/* 初期化 */
SDL_Init(SDL_INIT_EVERYTHING);
/* ウインドウを作成する */
SDL_SetVideoMode(640, 480, 0, SDL_HWSURFACE | SDL_DOUBLEBUF);
/* ビデオサーフェスを取得する */
videoSurface = SDL_GetVideoSurface();
/* 終了フラグが0の間ループする */
while(endFlag == 0){
/* イベント取得 */
if(SDL_PollEvent(&event)){
/* イベント取得できた場合 */
/* イベントにより処理を分岐する */
switch(event.type){
case SDL_MOUSEBUTTONDOWN: /* マウスボタン押された場合 */
/* 背景色(緑) */
bgColor = SDL_MapRGB(videoSurface->format, 0x00, 0xFF, 0x00);
/* 背景色塗りつぶし */
SDL_FillRect(videoSurface, &(videoSurface->clip_rect), bgColor);
/* フリップ */
SDL_Flip(videoSurface);
break;
case SDL_QUIT: /* 「×ボタン」が押された場合 */
/* 終了フラグを1にする */
endFlag = 1;
break;
default: /* それ以外の場合 */
/* 何もしない */
break;
}
}
/* CPU稼働率を下げるためにdelay処理を入れる。 */
SDL_Delay(10);
}
/* 終了 */
SDL_Quit();
return 0;
}
画面をクリックすると緑色になり、「×ボタン」を押すとプログラム終了する。