Salı, Aralık 15, 2009

Allegro ile ses oynatma ve sprite kullanma

Daha önceki Oyunlarda Basit AI(Yapay Zeka) Uygulamaları yazımın sonunda allegro ile sprite ve ses olaylarının nasıl yapılacağından bahsedeceğimi haber vermiştim. Yoğun geçen iki haftadan sonra nihayet verdiğim sözü biraz geçte olsa tutmanın zamanı geldi.

Ses Oynatma

Öncelikle nasıl ses oynatılacağından bahsedelim. Bunu için allegronun SAMPLE yapı türünü kullanıyoruz. Bu türden yararlanarak türettiğimiz değişkenlerle ses oynata biliyoruz. Türettiğimiz ses değişkenine oynatacağımız dosyayı yüklemek için load_sample() fonksiyonunu kullanıyoruz. Yüklediğimiz sesi oynatmak için play_sample() fonksiyonunu kullanıyoruz.

SAMPLE *ses; //Değişkeni tanımladık
ses = load_sample(dosya_yolu); // ses dosyamızı yükledik
play_sample(ses,100,0,1000,0); //ses dosyasını oynattık


play_sample() fonksiyonunun parametrelerinden bahsedelim biraz.
int play_sample(const SAMPLE *spl, int vol, int pan, int freq, int loop);


*spl => SAMPLE dan türettip ses dosyasını yüklediğimiz değişken
vol => Ses yüksekliği(volume) 0-255 arasında değer alır
pan => Sesin hangi hoparlör den çıkacağını ayarlar. İki değer alır 0 sol 255 sağ hoparlör.
*freq => Sesin frekansı
loop => Sesin tekrar sayısı 0 ise bir kez oynatıp durur. 0 dan farklı ise stop_sample() fonksiyonuna kadar durmaksızın devam eder.

Sprite Basma

Sprite basmak BITMAP yapı türü kullanılır. Karakterimizin 2 farklı yön(sağ ve sol) için 3 farklı hareket hali olduğunu var sayarsak 2x3 lük bir dizi değişkeni tanımlayabiliriz. Daha öncede kullanmış olduğumuz load_bitmap() fonksiyonu yardımı ile de her bir sprite'yi diziye aktarıyoruz. Farzı misal aşağıdaki gibi.

BITMAP *resim[2][3];
resim[0][0] = load_bitmap(resmin_yolu, NULL);
resim[0][1] = load_bitmap(resmin_yolu, NULL);
resim[0][2] = load_bitmap(resmin_yolu, NULL);

resim[1][0] = load_bitmap(resmin_yolu, NULL);
resim[1][1] = load_bitmap(resmin_yolu, NULL);
resim[1][2] = load_bitmap(resmin_yolu, NULL);


Şimdi sıra geldi bu sprite'leri oyun içinde kullanarak ekrana basmaya. Bir döngü yardımı ile karakterimiz hangi yönde (sağ veya sol) hareket edecekse dizini o boyutundaki sprite'leri ekrana basıyoruz. Aşağıdaki kod benim örneğimdeki ilgili kısım.

if (yon == RIGHT)
{
//Her bir yöne için ekrana basılacak 3 farklı sprite var
//Bu yüzden döngü 3 kez dönecek
for (int i = 0 ; i<4;i++)
{
x = ulubatli->getX();
x+=2;
ulubatli->setX(x);

//0 ve 3 karakterin hareket öncesi ve sonrası halini temsil etmekte
//yani yüzü sağa dönük ayakları bitişik halini
if (i == 0 || i == 3)
resim = ulubatli->getResim(0,1);
else if (i == 1)
resim = ulubatli->getResim(0,0); // sağa doğru sağ ayak ilerde
else
resim = ulubatli->getResim(0,2); // sağa doğru sol ayak ilerde

ciz();
rest(20);
}

yon = NONE;
}



Oyunlarda Basit AI(Yapay Zeka) Uygulamaları yazımda paylaştığım örneği bu yazıda anlattıklarımla birleştirip geliştirerek paylaşıyorum. Buyurun yeni halini buradan indirebilirsiniz. Uygulama her zamanki gibi Code::Blocks IDE'si kullanarak MinGW ile derlenmiştir.

Ekran Görüntüsü


Hiç yorum yok: