درس ۶ : استفاده از Sprite ها

فایلهای استفاده شده :

source code

pic

 

استفاده از 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;   

    }

حالا کار ما به اتمام رسیده است و نتیجه پایانی به صورت زیر است

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد