Yandex.Metrica
XNA'de Yazı Yazmak
Bu yazımızda XNA projemizde ekrana yazı yazdırmayı inleyeceğiz.Kuşku yok ki ister oyun yürütülürken ister oyun tasarlanırken ekranda bilgi amaçlı yazı yazabilme ihtiyacı vardır.Oyunumuzda kullanıcıya ilgili bilgileri(1) göstermek için veya oyunu kodlarken uyguladığımız ayarların işleyip işlemediklerini test etmek amaçlı yazıyı kullanabiliriz.

Başlamadan daha önceden incelediğimiz Content Pipeline yazısını incelemenizi öneririm.Çünkü yazı ekleme işlemi yapabilmemiz için Content klasörüne sağ tıklayıp Add New Item diyoruz.Oradan Sprite Font seçeneğini seçerek örneğin adına font dediğimiz bir Sprite Font dosyası ekliyoruz.


Bu işlemin ardından spritefont umuzla ilgili ayarları yapabileceğimiz xml dosyası görüntülenir.Bu xml içerisinde ki ayarları XNA Framework Content Pipeline sistemi kolaylıkla okuyabilecek durumdadır.Burada elle değiştirebileceğimiz yazıyla ilgili FontName,Size,Spacing,Style gibi ayarlar mevcuttur.Ben örneğimizde Style olarak Bold,Spacing olarak 5 Size olarak ise 20 giriyorum.Siz yazınızın özelliklerinin nasıl olmasını istiyorsanız o yönde gerekli ayarlamaları yaparsınız.Bundan sonra ki aşamada yapmamız gereken XNA'de 2D resim görüntüleme yazımızda olduğu gibi Content dosyasına eklediğimiz içeriği tanımlayıp Draw metotu içerisinde çizdirmek.

//Öncelikle SpriteFont(1) sınıfından bir değişken oluşturuyoruz
SpriteFont font;
//Bu işlemin ardından LoadContent metotu içerisinde gerekli yüklemeyi yapıyoruz
protected override void LoadContent()
        {
    
            spriteBatch = new SpriteBatch(GraphicsDevice);

            font = Content.Load("font");
    
        }

//Son olarakta Draw metotu içerisinde yazımızı yazdırıyoruz.Burada kullanılan SpriteBatch nesnesinin metotunun resim çizdirme işleminde kullanılandan farklı olduğuna dikkat ediniz.spriteBatch.DrawString() metotu ile yazılarımızı yazdırabiliyoruz.Bu fonksiyonun altı adet overload edilmiş hali olup biz sadece birini inceleyeceğiz.   
protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();

   //Kullandığım DrawString fonksiyonu için gerekli parametreler (SpriteFont,String,Vector2,Color) 
            //200 e 200 koordinatlarında,kırmızı renkte SpriteFont nesnesi olarka font(yukarıda tanımlamıştık) u kullandığım
   //Hello Mars(2) yazısı yazdırıldı
            spriteBatch.DrawString(font,"Hello Mars",new Vector2(200,200),Color.Red);
         
            spriteBatch.End();

            base.Draw(gameTime);
        }

Kaynak Kod :
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace Proje
{
    
   public class Game1 : Microsoft.Xna.Framework.Game
   {
       GraphicsDeviceManager graphics;
       SpriteBatch spriteBatch;
        SpriteFont font;
       
       public Game1()
       {
           graphics = new GraphicsDeviceManager(this);
           Content.RootDirectory = "Content";
       }
       protected override void Initialize()
       {
   
           base.Initialize();
       }
        protected override void LoadContent()
       {
   
           spriteBatch = new SpriteBatch(GraphicsDevice);
           font = Content.Load("font");
   
       }
       protected override void UnloadContent()
       {
   
       }
       protected override void Update(GameTime gameTime)
       {
   
           if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
               this.Exit();
   
           base.Update(gameTime);
       }
       protected override void Draw(GameTime gameTime)
       {
           GraphicsDevice.Clear(Color.CornflowerBlue);
           spriteBatch.Begin();
           spriteBatch.DrawString(font,"Hello Mars",new Vector2(200,200),Color.Red);
        
           spriteBatch.End();
           base.Draw(gameTime);
       }
   }
}


(1)Microsoft.Xna.Framework.Graphics alan adı gerekli
(2)Hello World'e misilleme amacıyla yapılmıştır.Aslında sadece biraz değişiklik amacıyla yapılmıştır kötü bir niyet aranmamalıdır. :)

Comments(0):
Bu yazı için henüz bir yorum yapılmamış
Yorum yapabilmeniz için üye olmanız gerekmektedir,(Giriş Yap|| Üye Ol)