Biliyorsunuz bir süredir SDL için D ilintileri yazmaya çalışıyorum. Bana nedense grafik programlama daha ilginç geliyor :)
Bu yüzden turna'yı artık tamamen Kadir Can arkadaşımıza devredip eğer becerebilirsem bu proje için görsel bir arabirim yazmaya karar verdim.
Hangi oyun olursa olsun bir oyunun genel yapısı şu şekilde:
'Oyun Döngüsü'
'İlklendir : ' Oyunun ihtiyaç duyduğu ilk değerleri burada veriyoruz.
'oyuncuKonumunuBelirle()'
'İçeriği Yükle : ' 2D hareketli grafikler texture, oyuncu modelleri, ses efektleri ve müzik
'içerik.yükle("dosya")'
'Güncelle : ' Burada oyuncunun bastığı tuşları kontrol ediyoruz ve oyunun her karesinde oyun değişkenlerini değiştiriyoruz.
'if(sağTuşBasılıMı)'
'konumuDeğiştir && animasyonuDeğiştir'
'Çiz : ' Burada oyunumuza grafik kartına ne gönderileceğini ve ekrana nasıl çizileceğini söylüyoruz
'oyuncuyuÇiz()'
Bunları anlatmamın sebebi ilkönce D ile SDL için sarıcı basit bir kütüphane oluşturmayı düşündüm. Çok kabaca taslak olarak şu şekilde:
import std.stdio;
import sdl;
class Çizici
{
}
class TemelOyun
{
Çizici çizici;
EkranYüzeyi ekran;
this() // ilklendir
{
SDL_Init(SDL_INIT_EVERYTHING);
ekran = SDL_SetVideoMode(640, 480, 24, SDL_HWSURFACE);
writeln("SDL ilklendirildi");
}
~this()
{
SDL_Quit();
}
void çalıştır()
{
içerikYükle();
Güncelle();
Çiz();
SDL_Delay(6000);
}
protected:
void içerikYükle() {}
void Güncelle() {}
void Çiz() {}
}
class Oyun : TemelOyun
{
this()
{
super();
}
}
void main()
{
auto oyun = new Oyun();
oyun.çalıştır();
}
Denemek isterseniz bu adresteki dosyayı sdl.d adıyla kaydedip
http://paste.pocoo.org/show/388884/
'$ dmd oyun.d sdl.d -w -ofdeneme -w -L-lSDL'
şeklinde derlemeniz yeterli. Burada Çizici nesnesinin görevi kendisine geçilen grafikleri 2d sprite çizmek olacak.
SDL'nin çalışma mantığı gereği (aslında diğer grafik kütüphaneleri de bu şekilde çalışıyor sanırım) ilkönce bu resimleri grafik kartının belleğinde çizilmeye hazır hale getirecek. SDL'de ekran yüzeyleri var. Aslında ekran da bir yüzey. Yaptığı işlem ekran kartının belleğinde çizilecek tüm yüzeyleri belirtilen ekran koordinatlarına BLIT Block Image Transfer denilen bir yöntemle kopyalamak. Daha sonra resim hazır hale geldiğinde ekran kartına çizdirecek.
Ayrıca kullanıcının SDL kütüphanesinin çalışma mantığını ve işlevlerini bilmesine de gerek kalmayacak. Bu yüzden TemelOyunNesnesi de aslında daha sonra başka bir modüle taşınabilir.
Yorumlarınızı ve önerilerinizi bekliyorum :)
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]