فایلهای استفاده شده :
استفاده از Sprite ها :
Sprite در حقیقت یک فایل عکس است که در ان چندین عکس موجود است مثلا در یک بازی ساده که از 25 عکس استفاده می شود 2 راه وجود دارد یکی این که 25 فایل مجزا داشته باشیم و دیگر این که 1 فایل بزرگ شامل همه این 25 عکس راه حل دوم بهتر است
//The surfaces
SDL_Surface *dots = NULL;
SDL_Surface *screen = NULL;
//The event structure
SDL_Event event;
//The portions of the sprite map to be blitted
SDL_Rect clip[ 4 ];
در اینجا ما چند متغییر global تعریف کردیم سطوح ساختار event و یک ارایه از SDL_Rect که مختصات 4 عکس را در بر دارد
void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL )
{
//Holds offsets
SDL_Rect offset;
//Get offsets
offset.x = x;
offset.y = y;
//Blit
SDL_BlitSurface( source, clip, destination, &offset );
}
این تابع apply_surface ما است اما با کمی دستکاری پارامتر جدید clip است از نوع اشاره گر به SDL_Rect که مختصات مر بعی از ان عکس است که ما می خواهیم بچسبانیم اگر NULL بفرستیم دیگر فرقی با تابع قبلی نخواهد داشت و تغییر دوم عوض کردن پارامتر دوم SDL_BlitSurface از NULL به clip است
//Clip range for the top left
clip[ 0 ].x = 0;
clip[ 0 ].y = 0;
clip[ 0 ].w = 100;
clip[ 0 ].h = 100;
//Clip range for the top right
clip[ 1 ].x = 100;
clip[ 1 ].y = 0;
clip[ 1 ].w = 100;
clip[ 1 ].h = 100;
//Clip range for the bottom left
clip[ 2 ].x = 0;
clip[ 2 ].y = 100;
clip[ 2 ].w = 100;
clip[ 2 ].h = 100;
//Clip range for the bottom right
clip[ 3 ].x = 100;
clip[ 3 ].y = 100;
clip[ 3 ].w = 100;
clip[ 3 ].h = 100;
در تابع main بعد از اماده شدن و بارگزاری فایلها ما مختصات 4 عکس را تنظیم می کنیم
در ادامه کار
//Fill the screen white
SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0xFF, 0xFF, 0xFF ) );
ما از تابع SDL_FillRect استفاده می کنیم که یک سطح رامی گیرد و ناحیه مشخص شده از سطح که پارامتر دوم است د باید از جنس SDL_Rect باشد را به رنگ پارامتر سوم در می اورد
//Apply the images to the screen
apply_surface( 0, 0, dots, screen, &clip[ 0 ] );
apply_surface( 540, 0, dots, screen, &clip[ 1 ] );
apply_surface( 0, 380, dots, screen, &clip[ 2 ] );
apply_surface( 540, 380, dots, screen, &clip[ 3 ] );
//Update the screen
if( SDL_Flip( screen ) == -1 )
{
return 1;
}
حالا کار ما به اتمام رسیده است و نتیجه پایانی به صورت زیر است