第一章「SDLの基本的な使い方」第七と二分の一話


今回は、プログラムのソースを合理的にきれいに並べるとともに、
CPUの負担を減らすための関数をご紹介します。(最初から紹介するべきだったかしら・・・)

メイン関数内のループで、何もしないとパソコンは全力でループ内を回ってしまいます。
それを毎周決まった時間休めさせるのがこれ。

SDL_Delay();

これをwhile文の中に入れておけば、引数の値分休ませることができ、
CPU使用100%から脱出できるはずです。

引数の値は、実際の時間ではないので、パソコンによって差が出ます。
ここでは100でやっていきます。


そして、今回はもう一度ソースの並び替えをします。
プログラミングというのは、常に合理的なソースを作る作業と言っても過言はないのではと、筆者は思ったりします。

#include <stdio.h> #include "SDL/SDL.h" #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") bool Init(void); //初期処理 bool Event(void); //イベント処理 void End(void); //終了処理 SDL_Surface *screen; int main(int argc, char* argv[]) { if(!Init()) //初期化&確認 { printf("初期化に失敗しました"); return 0; } while(1) //メインループ { if(!Event()) //イベント確認 { break; //イベントがfalseなら、ループを抜ける } SDL_Delay(100); } End(); //終了処理へ return 0; } bool Init(void) //初期の処理はここで済ます。 { if(SDL_Init(SDL_INIT_VIDEO)<0) //SDL初期化が失敗なら { return false; } SDL_WM_SetCaption("sample",NULL); //ウィンドウの名前 screen = SDL_SetVideoMode( 640, //横幅 480, //縦幅 32, //1ピクセルに使う色ビット SDL_SWSURFACE //出力設定(メインメモリ指定) ); return true; } void End(void) //終了関数 { SDL_Quit(); } bool Event(void) //イベント関数 { SDL_Event ev; SDLKey *key; while(SDL_PollEvent(&ev)) //イベントが待機中ならば処理をする。 { switch(ev.type) //イベントの種類で分岐 { case SDL_QUIT: //終了イベントのとき(ウィンドウの閉じるボタンなどが押されたとき) { return false; break; } case SDL_KEYDOWN: //キーボードが押されたとき { key = &(ev.key.keysym.sym); if(*key==27) //キーがESCキーならば { return false; break; } } } } return true; }




〜〜第八話へ〜〜