Yandex.Metrica
Sprite Sınıfı
Bu yazımızda XNA'da üzerinde çalıştığımız projelerde oluşturabileceğimiz sınıflara değinmek istiyorum.Bizim oluşturacağımız sınıflar ihtiyaçlara göre değişeceğinden aslında bunları tasarımı kişiden kişiye veya oyunlara göre değişir.Bu yazımda sadece temel olarak bir Sprite isimli sınıf oluşturacağım.Bu sınıf yardımıyla Game1 sınıfımız içerisinde gerekli kodlamayı daha kolay yapacağız.Böylece Game1 sınıfında kod kalabalığını engellemiş olacağız ve nesneye  yönelik tasarımın meyvelerinden yavaştan faydalanmaya başlayacağız.

Sprite sınıfında yapacağımız ayarlar sayesinde XNA oyun penceresinde görüntülenecek sprite lar  için gerekli düzenlemeleri takip edebileceğimiz bir sınıfımız olacak.Hayallerimiz büyüdükçe planlarımızı değiştirmemiz gerekiyor.Planlar değiştikçe çalışmalarımız değişiyor.Çalışmalarımız büyüyor veya daha karmaşık hale geliyorlar.İşte bu aşamada daha düzenli olarak herşeyi kontrol altına alabilmek adına nesneye yönelik tasarım konusunda var olan yeteneklerimiz geliştirmemizde fayda var.
Microsoft Visual Studio ortamında Solution Explorer kısmında projemize ait dosyaların bulunduğunu söylememize gerek yok.İşte buradan projemize Add diyerek yeni bir Class(Sınıf(1)) ekliyoruz.Sınıfımızın adını Sprite koyuyoruz.Amacımız çizdirilebilecek bir şeyler için gerekli fonksiyonları,alanları vb şeyleri tasarlamak.Sınıfımızı ekledikten sonra gerekli XNA sınıfları hakkında dikkatli olmalıyız(2).

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
{
   class Sprite
   {
//Sınıfa ait doku,konum,renk ve dikdörtgensel alan bilgileri tutan alanlar oluşturuluyor
       Texture2D texture;
       Vector2 position;
       Color color;
       Rectangle rectangle;

//Sprite sınıfı yapıcı fonksiyonu,Sprite sınıfı nesneler oluşturulurken gerekli olan parametreleri almamızı sağlar
       public Sprite(Texture2D texture,Vector2 position,Color color) 
       {
           this.texture = texture;
           this.position = position;
           this.color = color;
       }
//Sınıflar ilgili güncelleme,kontrol işlemlerinden sorumlu fonksiyon ismini farklı yazabilirsiniz.
       public void Update() 
       {
   //Çizim işleminde kullanılacak Rectangle sınıfı örneği için gerekli bilgiler toparlanıyor.Bu fonksiyonu Game1 sınıfı içerisinde
   //Update metotu içerisinde yazacağız.Sürekli olarak konum ve 2D doku bilgilerini kullanarak Sprite ımızın dikdörtgensel bölgesini hesaplayacak.
           this.rectangle = new Rectangle((int)position.X,(int)position.Y,texture.Width,texture.Height);        

        }
       public void Draw(SpriteBatch spriteBatch) 
       {
   //Sprite ımızın çizildiği fonksiyon olup bunuda Game1 sınıfı içerisinde Draw metotunda çağıracağız.
           spriteBatch.Draw(this.texture,this.rectangle,this.color);
       }
   }
}

Bütün bu işlemlerin ardından gelelim Game1 sınıfında Sprite sınıfından nesne türetip bununla ilgili gerekli kodlamayı yapmaya.Bu iki ayrı sınıf birbirini görüyor olmaları gerekiyor.Genede projeye eklerken veya başka nedenlerden dolayı iki sınıfın namespace lerinin aynı olması gerektiğine dikkat edelim.

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;
//Sprite sınıfı parametremizi yazıyoruz
       Sprite smileman;
       public Game1()
       {
           graphics = new GraphicsDeviceManager(this);
           Content.RootDirectory = "Content";
       }
       protected override void Initialize()
       {
   
           base.Initialize();
       }
        protected override void LoadContent()
       {
   
           spriteBatch = new SpriteBatch(GraphicsDevice);

   //Bu işlemle smileman isimli Sprite sınıfı nesnemizin yerini bellekte ayırıyoruz.Resim için tıklayınız...
           smileman = new Sprite(Content.Load("smileman"),new Vector2(300,300),Color.White);
       }
       protected override void UnloadContent()
       {
   
       }
       protected override void Update(GameTime gameTime)
       {
   
           if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
               this.Exit();
   //Sprite sınıfında tanımladığımız Update metotunu hatırlayalım.Bu sınıftan olan smileman nesnesi adına o fonksiyonu çağırıyoruz
           smileman.Update();
           base.Update(gameTime);
       }

       protected override void Draw(GameTime gameTime)
       {
   //Arka plan rengi olarak kahverengi ayarladım,değiştirebilirsiniz.
           GraphicsDevice.Clear(Color.Brown);
           spriteBatch.Begin();
   //Sprite sınıfı nesnemizi çizdiriyoruz
           smileman.Draw(spriteBatch);
        
           spriteBatch.End();
           base.Draw(gameTime);
       }
   }
}

(1) İlerleyen yazılarımda nesneye yönelik programlama hakkında bir yazı yazmayı umuyorum.
(2) Size önerim şimdilik yeni bir sınıf eklediğinizde projenize direk Game1 sınıfında mevcut olan namespace leri ekleyin.Daha sonra gereksiz olanları kendi ihtiyacınıza göre silebilme durumunuz var.


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