Windows Game | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar windows game

XNA Oyun Programlama Platformu Hakkında

30 January 2013 Yorum yapılmamış

Günümüzde tüm yazılım sektörü gibi oyun dünyası’da çok hızlı gelişmeye ve şekillenmeye başladı. Artık insanlar yeni bir oyun için aylarca beklemeye tahammül etmiyor.

Böyle zamanlarda yapılması gereken ürünü mümkün olan en hızlı yollardan tüketiciye ulaştırmaktır.
Bu durumun farkına varan oyun evleri birkaç yıl öncesine göre çok daha kısa sürelerde yeni oyun üretmenin yollarını aramaya başladı.

2004 yılında Microsoft, Indie olarak kısalttığımız Independent Game Developer‘lar (yani Bağımsız Oyun Geliştiriciler) için hızlı oyun geliştirme platformunu duyurdu ve 2006 yılının ikinci yarısında da XNA Game Studio ismi ile yayınladı.
2007 yılından beri oyun evleri ve bağımsız geliştiriciler XNA Framework ile hem 2 boyutlu hem de 3 boyutlu oyunlar geliştiriyorlar.

XNA, mümkün olan en az kod değişikliği ile şu platformlar için oyunları geliştirmemize yardımcı olur;

  • Windows üzerinde çalışan 2 boyutlu ve 3 boyutlu oyunlar
  • Microsoft’un oyun platformu olan XBOX üzerinde çalışan 2 boyutlu ve 3 boyutlu oyunlar
  • Microsoft’un mobil platformu olan Windows Phone ailesi üzerinde çalışan 2 boyutlu ve 3 boyutlu oyunlar

Özellikle mobil oyunların son yıllarda izlediği trende bakacak olursak, oyun geliştiriciler için çok güzel bir pazar olduğunu farkederiz.

XNA sayesinde, çok az kod değişikliği yaparak birden fazla platforma oyunlarımızı yayınlayabiliyoruz.

Üstelik oyun geliştirmeye başlarken ihtiyaç duyacağımız tüm araçlar (XNA Framework’un kendisi, Visual Studio’nun Express sürümü) Microsoft tarafından ücretsiz olarak sağlanıyor.

Tüm maddeleri özetleyecek olursak, XNA ile başlangıç maliyetleri olmadan, Microsoft tarafından desteklenen tüm platformlara hem 2 boyutlu, hem 3 boyutlu oyun geliştirebiliyoruz.

Neden XNA tercih etmeliyiz?

Geliştirici açısından düşünecek olursak, XNA, .Net Framework temelleri üzerine kurulduğu için, C#, VB.Net ve C++.Net gibi .Net ailesi diller ile geliştirilebiliyor.

Eğer zaten .Net dünyasına ve .Net ailesi dillere aşina iseniz, XNA ile oyun geliştirmeye hemen başlayabilirsiniz.

Üstelik XNA’de kazandığınız tecrübeler ve .Net dillerinde kazandığınız tecrübeler, birleşerek tüm yazılım geliştirme yeteneklerinizi olumlu yönde etkileyecektir.

Ayrıca Oyun Yaşam Döngüsü dediğimiz, bir oyun’un başlatıldığı andan sonlandırıldığı ana kadar geçen tüm süreçler XNA içerisinde çok net bir şekilde tanımlanmıştır.

Haliyle XNA ile oyun geliştirmeye başlamanın yanı sıra, XNA ile oyun geliştirme sürecinin kendisi de en az efor ile öğrenilecek kadar kolaylaştırılmıştır.

XNA ile geliştirilen oyunlar, minimum efor ile, WindowsXBOXWindows Phone platformlarına taşınabiliyor. Böylece hedef kitlemizi artırabilir, oyunumuzun çok daha büyük kitlelere ulaşmasını sağlayabiliriz.

Çok Oyunculu oyunlar geliştirme süreçleri de XNA sayesinde çok kolaylaştırılmıştır. XNA Framework, Yerel ağ üzerinden tek sunuculu veya tüm oyuncuların sunucu olduğu senaryo ve internet üzerinden tek sunuculu oyunların yazılması için hazır yapılar barındırmaktadır.

Tüm maddeleri özetleyecek olursak, .Net ailesi dil biliyor olmak XNA ile oyun geliştirmeye başlamak için büyük avantajdır.

Yazılım geliştirme ve oyun geliştirme tecrübelerinin transfer edilebiliyor olması aynı şekilde büyük avantajdır. Çok oyunculu oyunların yazılması için kolay kullanıma sahip sınıflar framework ile birlikte gelmektedir.

XNA – Başlangıç

18 February 2010 Yorum yapılmamış

XNA serimizin ikinci yazısında, Visual Studio 2008‘lerimizi açıyoruz ve yeni bir Windows Game projesi oluşturuyoruz.

Solution Explorer‘a baktığımızda, proje içindeki dosyaları görüyoruz.

XNA Projesi Solution Explorer Penceresi

XNA Oyununu çalıştırdığımızda, başlangıç noktası olarak Program.cs‘deki Program class’ının static void Main() methodu çalıştırılır.

Main() method’unun yaptığı iş basittir;

static void Main(string[] args)
{
	using (GameLoop game = new GameLoop())
	{
		game.Run();
	}
}

GameLoop class’ından instance oluşturup, Run() method’unu çağırır.

GameLoop class’ına bakarsak;

public class GameLoop : Microsoft.Xna.Framework.Game
{
	GraphicsDeviceManager graphics;
	SpriteBatch spriteBatch;

	public GameLoop()
	{
		graphics = new GraphicsDeviceManager(this);
		Content.RootDirectory = "Content";
	}

	protected override void Initialize()
	{
		base.Initialize();
	}

	protected override void LoadContent()
	{
		spriteBatch = new SpriteBatch(GraphicsDevice);
	}

	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);

		base.Draw(gameTime);
	}
}

LoadContent() method’u oyunda kullanacağımız grafikleri – sesleri – vs. hafızaya yüklediğimiz yerdir.

UnloadContent() method’u ise, LoadContent() method’unda yüklediğimiz kaynakları hafızadan sildiğimiz yerdir.

Oyun çalıştığı zaman LoadContent() method’u bir defa çalıştırılır. Oyun’dan çıkılırken de UnloadContent() method’u bir defa çalıştırılır.

Update() method’u, ekrana çizilecek nesnelerin, konum-boy-saydamlık-vs. değerlerinin hesaplandığı yerdir.

Draw() method’u ise, nesnelerin ekrana çizim işlemlerinin gerçekleştirildiği yerdir.

.Net Framework sabit olarak saniyede 60 kare çizim yapmayı hedefler. Update() ve Draw() method’larının saniyede 60 kere çalıştırılmasını beklemeliyiz.