第一章「SDLの基本的な使い方」第五話


今回からイベントについて少し解説していきます。 プログラムの世界で言うイベントとは、「何かが起きた」という意味が一番大きいかと思います。
たとえば、「マウスが動いた。」「キーボードの入力があった。」「プログラムが終了された。」 などがよく使う部類です。

さて、今回はその「何かが起きた」の時、それを知るために使われる構造体を紹介します。

SDL_Event //イベント構造体


これは構造体ですから、このまま使用することは出来ません。
ですので、構造体の割り当てをします。

SDL_Event ev;


これで、SDL_Event構造体の形のevが出来上がりました。

さて、このSDL_Event構造体の働きですが、 普通「何かが起きた」という事は、データにならないとわかりません。
そこで、「何かが起きた」ということを「何が起きたか?」まで細かくデータにして 保存する時に使うのが、この構造体なのです。

上記の場合、 ev.type の値が、「何が起きたか?」の答えになっています。

たとえば、キーボードのキーが押されたとき、
ev.typeの値は、SDL_KEYDOWN (予め用意されてるマクロ)となります。
とりあえず、ここまでの例をいつものようにソースに加えて見ます。

#include <stdio.h> #include "SDL/SDL.h" #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") int main(int argc, char* argv[]) { SDL_Init(SDL_INIT_VIDEO); SDL_WM_SetCaption("SAMPLEファイル",NULL); SDL_Surface *screen; screen = SDL_SetVideoMode( 640 , 480 , 32 , SDL_SWSURFACE ); SDL_Event ev; if(ev.type == SDL_KEYDOWN) //キーが押されたかどうかの確認。 { printf("キーが押されました"); } SDL_Quit(); return 0; }



上の状態ではまだ不完全ですね。
今回はソースを少し整理して、プログラムらしくしてみましょう。

#include <stdio.h> #include "SDL/SDL.h" #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") bool Event(void); //boolはtureかfalseのみ扱う定義 int main(int argc, char* argv[]) { SDL_Init(SDL_INIT_VIDEO); SDL_WM_SetCaption("SAMPLEファイル",NULL); SDL_Surface *screen; screen = SDL_SetVideoMode( 640 , 480 , 32 , SDL_SWSURFACE ); while(1) //プログラムを起動し続けるためにループを作る。 { if(!Event()) break; //もしイベントがあれば、ループを抜ける。 } SDL_Quit(); return 0; } bool Event() //イベント監視用の関数を作る。 { SDL_Event ev; if(ev.type == SDL_KEYDOWN) //キーが押されたかどうかの確認。 { printf("キーが押されました"); return false; //falseを返す。 } return ture; //イベントがなければtureを返す。 }



これで少しはプログラムらしくなったかと思います。
しかし、このままでは、イベントの認識がされてません。
その理由は次回で・・・

〜〜第六話へ〜〜