17 Haziran 2020 Çarşamba

XNA'de Yazı Yazmak [07-11-2012]




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. :)



Hiç yorum yok:

Yorum Gönder