Her ne kadar 3B çalışıyor olduğum için 2B’ye fazla vakit
ayıramasam da bu temel öğelere burda yer vermek istiyorum. Bu yazımda bazı
gerekli sınıf ve metotları anlatacağım. Sonraki yazımda ise bunları nasıl
kullanacağımızı göstereceğim.
Sınıflar:
Texture2D sınıfı: Ekrana koyacağımız nesneyi(örneğin bir
top) temsil eden grafiğin (örneğin bir top resmi) saklandığı sınıftır.
Vector2 sınıfı: Hepimizin lise fiziğinden bildiği hani o
okla temsil edilen, i ve j gibi iki bileşeni içeren vektördür. Burda farkında
olmanız gereken şey şudur ki, ekranınızda başlangıç noktası (origin) sol üst
köşedir ve y ekseni yani j bileşeni aşağı doğru artmaktadır. Koordinat
düzlemini baş aşağı düşünelim yani.
SpriteBatch sınıfı: Nesnelerimizi temsil eden sprite’ların
ekrana çizilmesini sağlayan sınıftır.
XNA Game studio zaten kendisi bize bu sınıftan nesneyi
yaratır.
Rectangle sınıfı: Çok basit olarak; Sol üst köşesinin
koordinatları ve boyutlarıyla bir dikdörtgeni temsil eder.
Metotlar:
Content.Load<>()
metodu: ContentManager sınıfının nesnesi olan Content, ki bize XNA GS
tarafından sağlanmıştır; nesnesinin metodudur.
< > işaretlerinin
arasına bu metot ile yükleyeceğiniz içeriği (bir texture, bir font) temsil eden bir tip yazılmalı ve
parametre olarak string tipinde varlığın (asset) adı verilmelidir. Örnek olarak
XNA GS’nin bize sağladığı Content klasörünün içinde “arkaPlan.tga” isminde bir
resmimiz olsun. Biz de bunu içerik klasöründen alarak oyuna yüklemek
isteyelim; doğal olarak bu 2 boyutlu resmi temsil edecek sınıf Texture2D
olacaktır. Yani yazmamız gereken kod:
Texture2D
backgroundTexture;
Değişkenini
tanımladıktan sonra;
backgroundTexture =
Content.Load<Texture2D>("arkaPlan");
olmalıdır.
spriteBatch.Begin()
metodu:
Bize XNA GS
tarafından tanımlanan spriteBatch nesnesinin metodudur. Daha önceden
anlattığım Draw() metodunun içine yazılır ve çizim işleminin nasıl yapılacağı
nesnelerin nasıl ele alınacağı hakkında grafik kartına bilgi verir.
Parametre
olarak;
SpriteBlendMode
cinsinden bir geçiştirme biçimi alır (overload 2). Geçiştirme, alfa (saydamlık)
değerlerine göre üst üste gelen nesne dokularının(texture) birbiri üstüne
çizilmesi işlemidir.
Örnek
olarak:
spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
Burada saydamlık(alpha)
değerlerine göre geçiştirme ve çizim işleri gerçekleştirilecektir.
Bazı durumlarda üst üste gelen
nesneler sorun yaratacaktır, geçiştirme istediğiniz sırayla olmayacaktır. Bu
gibi durumda sıraya göre geçiştirme yapmak için yine bu metodun (overload 3)
ikinci parametresi olan SpriteSortMode’tan bir sıralama tipi seçilmelidir.
Örneğin nesneleri arkadan öne sıralamak için:
spriteBatch.Begin(SpriteBlendMode.AlphaBlend,
SpriteSortMode.BackToFront,
SaveStateMode.None);
SaveStateMode burada bu etkinin
hatırlanması anlamına gelecektir, None yerine SaveState dersek performans
kaybına uğrarız.
spriteBatch.Draw() metodu: 6
tane overload’ı olan bu metodu parametre parametre anlatmak yerine kısaca
bahsedeyim, bir nesnemizin, Texture2D
türünden desenini, bu desenin İçine çizileceği dikdörtgeni, pozisyonununu ,
desenin hangi ışıkla aydınlatılacağını …vb parametre alarak nesnemizin görsel temsilini
çizdirir. Örnek olarak bir arkaplan için;
spriteBatch.Draw(arkaPlan, gorulebilirEkran, Color.White);
Color.White burada
beyaz ışığı temsil eder ki bu da herhangi bir renk değişimi olmamasını sağlar
ama diğer renk değerlerini denerseniz, resmin üzerine renkli bir ışığın etki
ettiğini göreceksiniz.
spriteBatch.DrawString()
metodu: bu metot da font’u, yazılacak yazıyı(string), içine yazılacağı
dikdörtgeni(yazıyı konumlandırmak için gerekli) ve yazının rengini parametre
alarak ekrana yazının çizilmesini sağlar.
spriteBatch.DrawString(font,
"merhaba
XNA",
new
Vector2(50.0f,100.0f),
Color.Red);
font burada
font
= Content.Load<SpriteFont>("Arial");
şeklinde tanımlanmış XML formundaki bir spriteFont dosyasının temsilidir.
Şimdilik bu kadar metot yeter
sanıyorum; ama gerek bu metotlarla gerekse başka metotlarla ilgili sorununuz
olursa iletişime geçmekten çekinmeyin.