20 Ağustos 2009 Perşembe

XNA ile Oyun Programlama

XNA ile bugün geliştireceğimiz uygulamamızda 800x600 ekranımıza bir resim ekleyip bunu nasıl hareket ettirebileceğimiz konusu üzerinde duracağım.
Öncelikle çalışacağımız ekranın koordinat düzlemine benzer bir yapıda old
uğunu ve sol üst köşeşinden başladığını unutmayalım ancak bu düzlemde karışıklığa sebep olmamak için negatif değerler yerine koordinatlar için pozitif değerler kullanılmaktadır.
Öncelikle kullanacağımız görüntünün boyutunu, konumunu ve resmimizi tutacak
Texture2Dyapılarını tutan bir sınıf geliştirmek.Image a
dında bir sınıf oluşturuyoruz.Sınıfı oluştururken kullanacağımız Microsoft.Xna.Framework isimalanını ve diğer gerekli isim alanlarını eklemeyi unutmayalım.Vector2 bizim gerekli koordinatları tutabileceğimiz ,Texture2d ise 2D resim dosyalarını tutabileceğimiz bir sınıftır.Kullancağımız resim ve ses dosyalarını projemizde bulunan Contents altında bulundurmamızgerekiyor.Bu dosylarımız bir Asset Name özelliği bulunmaktadır.Bu özellik yardımıyla Texture2D im= Content.Load("Images/image"); şeklinde resmin uzantısını vermemize gerek kalmadan resmimiz yüklenmiş olur ancak henüz çizim işlemi yapılmamıştır.

Image instance = new Image(Content.Load("Images/image"), new Vector2(69, 79), new Vector2(0,0));
şeklinde nesnemizi üretiyoruz.Resmimizi çizdirmek için Draw metotu içerisine

spriteBatch.Begin(); spriteBatch.Draw(instance.image, instance.point, Color.CornflowerBlue);
spriteBatch.End();

şeklinde resmimizi çizdirmiş oluyoruz.Ancak görüldüğü gibi resmimiz harek
etsizdir. Hareket ettirebilmemiz için Update metotu içerisinde gerekli işlemleri tanımlamamız gerekmektedir.
Biz 800x600 yapımızda hareket eden bir top ve bu yapı içerisinde çarpışması ve her çarpışmada
MediaPlayer yardımıyla bir mp3 dosyayının nasıl çalışacağı ve çarpışmanın sayısını sayan bir yapı tasarlayacağız. Çarpışma kontrolunu oluşturduğumuz aşağıdaki metot yardımıyla gerçekleştireceğiz.
Update metotu içerisinden çağırdığımız metot şu şekilde tanımlandı.

Ekranımızın boyutları ve o anki konumları parametre olarak gönderildi.ref anahtar sözcüğü ile göndermemizin sebebi ise değer tipi olan x ve y değerlerinin direk değişmelerini sağlamak.Döndürülen değerlerin OR işlemine tabi tutulması ise herhangi bir çarpmanın gerçekleşip gerçekleşmediğidir.Metotumuz

yaptığı iş ve nasıl çalıştığı ayrıntılı şekilde tanımlanmıştır.
Update metotumuz ise
if (instance.ImageMove(800,600,5,10)) { MediaPlayer.Play(song); }
şeklinde çalışmaktadır ve çarpma işlemi gerçekleştiğinde MediaPlayer yardımıyla çarpma sesi
çalmamıza sebep olacaktır. Ses dosyasını oyuna dahil etmek için ise
Song song = Content.Load("Musics/crash");
kullanabiliriz.

Uygulamamız üzerinde string ifadeler yazmak istersek
Content>Add>New Item> Sprite Font ile bir dosya ekliyoruz.Bu dosyamızda yazının
fontu özellikleri belirlebilmektedir. Bunu uygulalamıza çizdiribilmek için ise öncelikle LoadContent metotu içerisinde
Font font = Content.Load("yazi"); şeklinde yüklenmeli ancak bu nesnelere erişim için bunları global tanımlamamız gerektiğini unutmamalıyız.Ekranda çizdirilmesi işi diğer image dosyalarının olduğu gibi draw metotu içerisinde yapılır vespriteBatch.DrawString(font, "Carpma Sayisi=" + Image.Count.ToString(), new Vector2(0, 570), Color.Black); şeklinde yapılabilir.
Bu makalemizde XNA için resim, ses ve font dosyalarını ekleme resim dosyalarının hareket ettirme, ses dosyalarının çalınması ve font dosyasının ekrana nasıl çizilebileceğini incelemiş olduk.Uygulamanın örnek görüntüsü. Kaynak kodlara buradan ulaşabilirsiniz.





Hiç yorum yok: