Plazma sayı 8, sayfa 26

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 26

5. SDL JOYSTICK - joystick - 6. SDL EVERYTHING - Bütün sistemleri aktif hale getirir 7. SDL INIT NOPARACHUTE - SDL'in hata sinyallerini yakalamasını önler - 8. SDL EVENTTHREAD - çok görevlilik -

Alt sistemleri çalıştırmayı öğrendik ama ya çalışan sistemleri kapatmayı? Şimdi de çalıştırdığımız SDL programını ve alt sistemleri nasıl kapatacağımızı öğreneceğiz.

İlk komutumuz SDL Quit. Bu komut SDL Init komutunun yaptığı işin tam tersini yapar ve başlattığınız SDL programını kapatır. Bu programı kullanırken herhangi bir argüman girmenize gerek yoktur. Kullanışı:

SDL

şeklindedir. Bu komut ile halihazırda çalışan bütün SDL alt sistemleri ve SDL programı kapanır. Diğer komutumuz ise SDL QuitSubSystem. Bu komut ile çalışmakta olan istediğimiz alt sistemi kapatabiliriz. Kullanımı:

( SDL INIT TIMER );

şeklindedir. Örneğimizde zamanlayıcı alt sistemini kapattık ama SDL programımız çalışmaya devam etti.

Ayrıca SDL WasInit fonksiyonu ile istediğiniz alt sistemin yüklü olup olmadığını kontrol edebilirsiniz. Bu fonksiyonunun yazılışı şöyledir:

if(SDL WasInit(SDL INIT VIDEO)!-0) printf ("Video alt sistemi else printf ("Video alt sistemi yuklu

Şimdi öğrendiklerimizle örnek bir SDL programı yazalım.

/* SDL header dosyas#. Butun SDL programlari buna ihtiyac duyar */ #include "SDL.h" #include <stdio.h>

int main() ( printf ("SDL programi ba#lat#l#yor.n");

/* SDL programi baslatilip Video ve Ses sistemleri aktif hale getiriliyor */ İZ£((SDL Initi SDL INIT VIDEO |SDL INIT AUDIO)---1) ) 1 İptinti | stderr, "SDL programi baslatilamadi: SDL GetError() Vi exit(-l1); )

$s.Vna",

fprintf (stdout,"SDL programi baslatilamadi

fprintf (stdout,"SDL programi kapatiliyor.ln");

/* SDL programi ve butun alt sistemleri kapatiliyor */ SDL Eprint?f (Stdout,

exit (0);

SDL ve Grafik

Sırada grafik komutlarını kullanmayı öğrenmek var. İlk olarak yapmamız gereken şey video alt sistemini aktif hale getirmek. Ardından bir yüzey (surface) tanımlamalı ve SDL SetVideoMode komutu ile bu yüzeyi kullanarak istediğimiz çözünürlükte bir pencere yaratmamız gerekir.

İlk olarak yüzey terimini açıklamak istiyorum. SDL'de ekrana çizdirmek istediğiniz bilgiler bir yüzeyde saklanır. Bu yüzeyler aslında önceden tanımlanmış yapılardır (struct). Bir yüzeyi şöyle tanımlayabiliriz:

SDL Surface *screen; İçeriği ise şöyledir:

typedef struct SDL Surface (| Uint32 flags; /* Salt okunur */ SDL PixelFormat *format;/* Salt okunur */ int w, h; /* Salt okunur */ Ülnt16 pitch; /* Salt okunur */ void *pixels; /* oku-yaz */

/* kirpma bilgisi */ SDL Rect clip rect; /* Salt okunur */ /* Referans sayac# yuzey bosaltilirken kullanilir */ int refcount; /* cogunlukla okunur */

/* Bu yap# ayn# zamanda burda gösterilmeyen baz# özel alanlara sahiptir */ SDL Surface;

Gördüğünüz gibi SDL Surface yapısı ile uğraşırken sadece pixels değişkenini kullanabilirsiniz. Bu değişken yüzeyin her pixel'inin renk bilgisini taşır ve isterseniz her pixel'i teker teker değiştirebilirsiniz. Bu konuya ileride daha detaylı olarak bakacağız ama şimdi devam edelim.

Programın başında ekrana yansıtacağımız görüntüler için bir yüzey tanımlarız ve bu yüzey ile bir pencere açarız. Bunu SDL SetVideoMode komutu ile yaparız. Kullanımı aşağıdaki gibidir.

screen 640,

SDL SetVideoMode ( 480, 8, SDL SWSURFACE);

Bu komut ile screen yüzeyini ekrana yansıtacağımız ana yüzey olarak tanımlar ve 640'a 480 pixel çözünürlükte bir pencere ya-

ratırız. Ekrandaki bit başına düşen pixel sayısı 8 olur. Ve

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