Anasayfa » C++ » SDL kütüphanesi ile sprite kullanımı

SDL kütüphanesi ile sprite kullanımı

7 Nisan 2010  |  Yazar: coders  |  Yorum Yok  |  8 kez okundu
Facebook'da Paylaş Twitter'da Paylas FriendFeed'de Paylaş SDL kütüphanesi ile sprite kullanımı

Bu bölümde bir resim dosyasının parçalanması ve her bir parçasının ayrı ayrı kullanılabilmesi işlenecektir.
Bir çok resim dosyası ile ayrı ayrı uğraşmak yerine , oluşturulan bir resim dosyasının parçalanması (yani belli kısımlarının alınması) ve her bir parçasının yeni bir resim dosyası gibi kullanılabilmesi
münkündür.Bunu gerçekleştirmek için bir resim dosyasının alınmak istenen pixel değerleri belirlenmeli (w,h olarak ) ve bunun uygulanacağı yüzeyinde belirlenmesi ardından yapıştırma işleminin gerçeklenmesi
gerekir.Bu bölüme kadar kullanılan örneklerde _BlitSurface fonksiyonlarında ikinci parametre NULL olarak kullanılmaktdaydı.Bu parametre source yüzey için clip (w,h aralığı ) verilerini tutar.Yani
source surface in hangi kısmı alınacaksa o kısmı gösteren bir SDL_Rect * bilgisidir.

Örnek tede görüldüğü gibi oluşturulan ekrana(screen) yapıştırılacak source dosyamız için SDL_Rect[4] dizisi belirlenmiştir.Her bir alan için belirlenen x,y,w ve h değerleri belirlendikten sonra
apply_surface de bu kısımların screen için girilen x,y noktalarından itibaren uygulanması sağlanmıştır.Böylece bir source file ın belli bir kısmı bir yüzeyin belli bir kısmına yapıştırılmış olur.

[SDL_FillRect: bu fonksiyon ile yüzey alanımız belli bir renkle oluşturuluyor.]

#include <sdl .h>

#include <sdl_image .h>

#include <string>

using namespace std;

#define width 640

#define height 480

#define bpp 32

typedef SDL_Surface * SurfacePtr;

SurfacePtr dots = NULL;

SurfacePtr screen = NULL;

SDL_Event _event;

SDL_Rect clip[4];

SurfacePtr imageLoad(string filename)

{

        SurfacePtr old = NULL;

        SurfacePtr newSurface = NULL;

        old = IMG_Load(filename.c_str());

        if(old == NULL)

                return newSurface;

        newSurface = SDL_DisplayFormat(old);

        SDL_FreeSurface(old);

        if(newSurface != NULL)

        {

                Uint32 key = SDL_MapRGB(newSurface->format,0,0xFF,0xFF);

                SDL_SetColorKey(newSurface,SDL_SRCCOLORKEY,key);

        }

        return newSurface;

}

void apply_surface(int x,int y,SurfacePtr src,SurfacePtr dest,SDL_Rect* clip = NULL)

{

        SDL_Rect offset;

        offset.x = x;

        offset.y = y;

        SDL_BlitSurface(src,clip,dest,&offset);

}

bool init()

{

        if(SDL_Init(SDL_INIT_EVERYTHING) == -1)

                return false;

        screen = SDL_SetVideoMode(width,height,bpp,SDL_SWSURFACE);

        if(screen == NULL)

                return false;

        SDL_WM_SetCaption("Pencere",NULL);

        return true;

}

bool loadfiles()

{

        dots = imageLoad("dots.png");

        if(dots == NULL)

                return false;

        return true;

}

void clean()

{

        SDL_FreeSurface(dots);

        SDL_Quit();

}

int main(int argc, char *argv[])

{

        bool quit = false;

        if(init()== false)

                return 1;

        if(loadfiles() == false)

                return 1;

        clip[0].x = 0;

        clip[0].y = 0;

        clip[0].w = 100;

        clip[0].h = 100;

        clip[1].x = 100;

        clip[1].y = 0;

        clip[1].w = 100;

        clip[1].h = 100;

        clip[2].x = 0;

        clip[2].y = 100;

        clip[2].w = 100;

        clip[2].h = 100;

        clip[3].x = 100;

        clip[3].y = 100;

        clip[3].w = 100;

        clip[3].h = 100;

        SDL_FillRect(screen,&screen->clip_rect,SDL_MapRGB(screen->format,0xFF,0xFF,0));

        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]);

        if( SDL_Flip( screen ) == -1 )

        {

                return 1;

        }

        while( quit == false )

        {

                while( SDL_PollEvent( &_event ) )

                {

                        if( _event.type == SDL_QUIT )

                        {

                                quit = true;

                        }

                }

        }

        clean();

        return 0;

}

Facebok'ta Paylaş

Benzer Yazılar

Etiketler: , , , , , , , , , , , , , , ,
avatar

Ahmet Ates

http://www.coders.gen.tr/ 25 yasindayim. Z.K.U Biyomedikal Cihaz Teknolojisi bölümünü okudum, Programlama dilleri arasindan ilgilendiğim ve profesyonel olarak hizmet verdiğim dil Fortran'dir. Web olarak Php,Css ve hazır sistemler olarak Wordpress ve Vbulletine hayranlık besliyorum.

Bu yazı hakkında birşeyler demek ister misiniz?

RSS üzerinden bu yazıya yapılan yorumları takip edin.

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir.

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Programlama