イベントを取得する。
ユーザーから何らかのアクションがあった場合、イベントという形で、プログラムの中に溜め込まれる。
そのイベントを取得するのがこの関数の役割。
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; }
画面をクリックすると緑色になり、「×ボタン」を押すとプログラム終了する。