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


お約束どおり。
SDL_Surface間のデータの転送関数。

SDL_BlitSurface()

でございます。
引数には、

(転送元のSDL_Surface型,
 転送元のSDL_Rect型,
 転送先のSDL_Surface型,
 転送先のSDL_Rect型)

の計四つを使います。
転送元のSDL_Rect型は、NULLにしておけば、全転送になります。

SDL_Surface *screen;
SDL_Surface *img;

SDL_Rect rect;
rect.x=0;rect.y=0;

SDL_BlitSurface( img , NULL , screen , &rect );


引数のrectは、アドレスで参照で記入します。(&をつける。)
上のソースで、rect.wとhに値を代入してません。
実は、転送先のSDL_Rect型は、wとhを読み取らず、
x,yの座標に、転送元のw,hの幅をそのまま乗せるのです。

ですから、この場合、imgがまるごとscreenに移ったことになります。

では、念願の(?)画像を画面に映し出すプログラムができあがります。

#include <stdio.h> #include "SDL/SDL.h" #include "SDL/SDL_image.h" #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") #pragma comment(lib, "SDL_image.lib") bool Init(void); //初期処理 bool Event(void); //イベント処理 void End(void); //終了処理 SDL_Surface *screen; SDL_Surface *img; int main(int argc, char* argv[]) { if(!Init()) //初期化&確認 { printf("初期化に失敗しました"); return 0; } img = IMG_Load("sample.png"); //これでimgには、sample.pngが入りました。 while(1) //メインループ { SDL_Rect rect; rect.x=0;rect.y=0; rect.w=640;rect.h=480; SDL_BlitSurface(img,NULL,screen,&rect); //imgをscreenに転送 SDL_Flip(screen); if(!Event()) //イベント確認 { break; //イベントがfalseなら、ループを抜ける } SDL_Delay(100); } End(); //終了処理へ return 0; } ・・・以下省略・・・



次回は、アニメーションにするための方法をやってみようと思います。

〜〜第十二話へ〜〜