戻る


SDL_PollEvent

イベントを取得する。

ユーザーから何らかのアクションがあった場合、イベントという形で、プログラムの中に溜め込まれる。

そのイベントを取得するのがこの関数の役割。

使い方

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;
}

画面をクリックすると緑色になり、「×ボタン」を押すとプログラム終了する。

関連項目