Bu yazımızda bir xna uygulamasında ekrana herhangi bir yazıyı nasıl yazarız bunu inceleyeceğiz. XNA ile birlikte gelen Console.WriteLine() gibi oyun sahnesine yazı yazmamızı sağlayan hazır bir method bulunmadığı için bu işlemi yapmak biraz daha karışıktır diyebiliriz.
Hello World
Konuya daha yakından bakmak için yeni bir WindowsGame uygulaması açıyoruz. Uygulamamızın özünde yapacağı tek bir işlem var o da ekrana Hello World yazmak. Bu durum yapılması gereken adımlar bakımından herhangi bir konsol veya masaüstü uygulamasında olduğu kadar kolay değildir. Bu durumu açıklamak için, XNA 'de ekrana çizeceğimiz herşeyin aslında ContentPipeLine mimarisi tarafından işlenecek olmasıdır diyebiliriz. Dolayısıyla ekranda çizmek istediğimiz her şey bu yapıyı destekler nitelikte olmalıdır ki XNA bunu çizebilsin. Sonuç itibariyle ilk etapta yapmamız gereken şey yazımızı bir şekilde XNA 'e tanıtmaktır. Burada yazıdan kastımız aslında yazı tipi olan Font ve fontun özellikleridir. Şimdi yukarda söylediklerimi biraz daha somutlaştırmak için Solution Explorer 'dan Content projesine sağ tıklayıp, Add > New Item diyoruz. Bu işlemi yaptıktan sonra karşımıza aşagıdaki pencere gelecektir.

Açılan pencereden Sprite Font adındaki elemanı seçiyoruz ve ardından bir isim verip bunu projemize ekliyoruz. Fontumuzu projemize ekledikten sonra karşımıza bir xml dökümanı gelecektir. Eğer karşınıza böyle bir döküman gelmediyse Solution Explorer 'dan az önce eklediğimiz SpriteFont 'a çift tıklamanız yeterlidir. Aşağıdaki resimde görebileceğiniz gibi bu XML dökümanı font ile ilgili tüm özellikleri tutmaktadır.

Bunun dışında, Solution Explorer 'dan bu SpriteFont 'u seçip Property panelinden özelliklerine bakarsanız eğer, ContentImporter ve ContentProcessor özelliklerinde, Sprite Font Description adında fontlara özel bir değerin atandığını görebilirsiniz. Bu özellikler tabiki eklediğimiz yazı tipinin ContentPipeLine tarafından nasıl ele alınıp işleneceğini belirtiyor.

XML kodlarına kısaca bir bakarsanız eğer, Asset etiketi içinde bulunan Type niteliğinde Graphics:FontDescription şeklinde bir değer görürsünüz. İşte bu nitelik sayesinde bu xml dosyası içindeki bilgilerin bir Font ile ilgili bilgiler olduğunu belirtilmiş oluyor. Bunun dışında ayrıca FontName etiketi içinde ekrana yazılacak yazının tipini, Size etiketi içinde de boyutunu belirttiğini görebilirsiniz. Kısaca ekrana yazılacak yazının nasıl olması gerektiği ile ilgili tüm özellikleri buradan yönetebiliyoruz.
Artık elimizde XNA ' in anlayabileceği bir content var. Şimdi bunu kullanarak ekrana istediğimiz yazıyı yazabiliriz. Nasıl ki Texture2D adında 2 boyutlu imajlara yönelik özelleştirilmiş bir sınıfımız var ise burada da yazılar için özelleştirilmiş SpriteFont adında bir sınıf vardır. Ekrana yazımızı yazabilmek için aşağıdaki işlemleri yapmamız yeterlidir.
Öncelikle global düzeyde SpriteFont tipinde bir nesne tanımlayalım.
SpriteFont sp;Daha sonra LoadContent methodu içinde bu nesneye projeye eklediğimiz fontu yükleyelim.
sp = Content.Load<SpriteFont>("SpriteFont1");Son olarak ekrana istediğimiz yazıyı yazdırmak amacıyla Draw methodu içine aşagıdaki kodları yazalım.
spriteBatch.Begin();
spriteBatch.DrawString(sp, "Hello World", new Vector2(50, 50), Color.Black);
spriteBatch.End();Bu işlemleri yaptıktan sonra uygulamayı derleyip çalıştırıp sonucu görebilirsiniz.
Draw methodu içinde dikkatinizi çekmek istediğim nokta, SpriteBatch.DrawString() isimli methoddur. Nasıl ki Draw ile ekrana bir nesne çiziliyorsa DrawString() ile de ekrana bir yazı yazılıyor.
Sonuç olarak xna ile ilgili ekrana yazı yazmak konusunda ilk başta Console.WriteLine() kadar kolay olmadığını söylesekte aslında durumun okadar da vahim olmadığını da görmüş olduk sanırım. Aslında yapılan işlemler son derece kolay şeylerdir. Sadece 1 tek methodda yaptığımız işi biraz daha fazla adıma bölüyoruz. Burada ufak bir öneri vermek gerekirse, bu tarz işlemler için mutlaka kendi Helper sınıflarınızı yazın. Mesela buradaki örnekte olduğu gibi ekrana yazmak için gereken adımları toparlayıp daha basit bir hale getirmek sizin elinizde.
Örnek Uygulama
Mehmet Aydın Ünlü
0 yorum:
Yorum Gönder