Plazma sayı 8, sayfa 28

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 28

SDL Rect dikdortgen;

şeklinde tanımlamalıyız. Eğer amacımız resmimizi belirli bir koordinata koymak ise şu yöntemi kullanmalıyız:

SDL Rect hedef; hedef.x x; // #4 // #4

resmi koymak istedi#imiz noktan#n x resmi koymak istedi#imiz noktan#n y

hedef.y - y;

SDL BlitSurface(l

image, NULL, screen, &hedef);

Ama eğer amacımız resmin sadece bir bölümünü çizdirmek ise bu yöntemi kullanmalıyız:

SDL Rect dortgenl,dortgen2;

dortgenl.x x; // resmin ekran üzerine // yerle#tirilece#i x noktast# dortgenl.y y; // resmin ekran üzerine // yerle#tirilece#i y noktast# dortgenl.w — w; // resmin ekran üzerine // çizilecek geni#li#i dortgenl.h - h; // resmin ekran üzerine // çizilecek uzunlu#u dortgen2.x — x2; // x düzlemindeki ba#lang#ç // dortgen2.y — y2; // y düzlemindeki ba#lang#ç // SDL BlitSurface(l image, &dortgen2, screen, &dortgenl1);

Peki ya ekrandaki görüntünün bir kısmını bir yüzeye aktarmak istersek? Onu da bu yöntem ile yapabilirsiniz:

SDL Rect dortgenl,dortgen2;

dortgenl.x xl; ekrandan kopyalanacak parçan#n sol üst noktas#n#n x koordinat$ ekrandan kopyalanacak parçan#n sol üst noktas#n#n y koordinat# ekrandan kopyalanacak parçan#n sa# alt noktas#n#n x koordinat# ekrandan kopyalanacak parçan#n sa# alt noktas#n#n y koordinat#

dortgenl.y yl;

dortgenl.w

dortgenl.h ya;

//

dortgen2.x dortgen2.y

xl; yl;

- yukar#dakinin ayn#s# yukar#dakinin ayn#s# SDL BlitSurface(screen, temp, &dortgenl);

&dortgen2,

Bunun dışında SDL_Rect kullanarak ekrana bir dikdörtgen çizdirmeniz de mümkün. Bunun için bir SDL_Rect tanımlıyorsunuz. Bu dörtgeni yerleştireceğiniz x ve y koordinatlarını, dörtgenin genişliği ile uzunluğunu ve rengini belirledikten sonra SDL_FillRect fonksiyonu ile ekrana istediğiniz koordinata istediğiniz boyutlarda ve istediğiniz renkte bir dörtgen çiziyor. Kod şöyle:

Uint32 renk; // dörtgenimizin renk de#eri

SDL Rect dortgen;

dortgen.x — x; dörtgeni ekran üzerinde // yerle#tirece#imiz x noktast# dortgen.y y; // dörtgeni ekran üzerinde // yerle#tirece#imiz y dortgen.w — w; // dörtgenimizin geni#li#i dortgen.h - h; // dörtgenimizin uzunlu#u SDL FillRect (screen, &dortgen, renk);

Oldukça kolay değil mi? Sanırım rengi nasıl belirttiğimizi merak ediyorsunuz. Ama şimdilik renk konularına girmeyeceğim ama ileride (az ilerde :)) detaylı olarak anlatacağım. Şimdi ise size ekran tazeleme fonksiyonlarını anlatacağım.

2D grafik programlamasında ekrana çizdireceğimiz görüntüleri önce çizdirmek, sonra ekranı tazelemek ve sonra tekrar çizdirmek gerekir. Tazelemezsek ne olacağını basit bir örnek ile açıklayayım. Diyelim ki arkaplanda tam ekran çalışmakta olan bir penceredeki uygulamanız kilitlendi. Onun önündeki daha küçük bir pencerede çalışan uygulamanızın penceresini taşırsanız fark edeceğiniz üzere küçük pencerenin eski bulunduğu yerde görüntüsü (en azından görüntüsünün bir kısmı) hala durur. İşte ekrana çizim yaptıktan sonra ekranı tazelemezsek bu ve buna benzer bir sonuç alırız.

Peki ekranı nasıl temizleyeceğiz? Bunun iki yolu bulunmakta. Birincisi SDL_UpdateRect fonksiyonu ile.

SDL UpdateRect (screen, 0, 0, image->w, image->h);

Ekrandaki görüntüyü sakladığımız screen yüzeyinin 0,0 koordinatından ekrana çizdireceğimiz image yüzeyinin genişliği ve yüksekliği boyunca uzanan alanı tazele komutudur bu. Bunun yerine bütün çizim işlemini bitirince ekranın tamamını tazeleyecek bir SDL_UpdateRect komutu daha kullanışlı olabilir. Şöyle ki: SDL_UpdateRect(screen, 0, 0, 0, 0);

0, 0);

Ekranı tazelemek için kullanabileceğimiz bir diğer yöntem ise SDL_Flip fonksiyonudur. Bu fonksiyon sadece Video modu seçilirken çifte tamponlama (Double Buffering) bayrağı (SDL_DOUBLEBUF) seçilmiş ise kullanılabilir. Çünkü bu komut tamponların değişmesini sağlamak yolu ile ekranı tazeler. Eğer çifte tamponlama özelliğini kullanamıyorsanız bu komut yerine yukarıdaki bütün ekranı tazeleyen SDL_UpdateRect(screen, 0, 0, 0, 0); komutunu kullanın. Ama imkanınız varsa SDL_Flip'i seçmeye gayret edin. Kullanımı:

SDL Flip(screen);

Bunun dışında bir de SDL_UpdateRect fonksiyonunun SDL_UpdateRects adında birden fazla dörtgeni aynı anda tazeleyen farklı bir versiyonu da bulunmaktadır. Bu fonksiyonun kullanımı ise şöyledir:

SDL UpdateRects (

screen, dortgensayisi, *dortgenler);

Klavyeyle gezinmek için ← ve → tuşları.