Xna Game Studio Giriş



Herkese yeniden merhabalar arkadaşlar. Geçen yazımda bilgisayar oyunları ve Türkiye’de oyun piyasası hakkında bir makale yazmıştım. Makalemin sonunda Xna Game Studio’ya giriş yapacağımı belirtmiştim. Bugün de elimden geldiğince Xna’i anlatmaya çalışacağım. O zaman hiç durmayalım ve başlayalım derim ben. :)

En kaba haliyle Xna, .Net teknolojisinin getirdiği avantajları kullanarak, diğer oyun geliştirme platformlarına nazaran çok daha basit bir şekilde oyun yazabilmemizi sağlayan, tahmin edileceği üzere Microsoft tarafından geliştirilen ve oyun programcıları için tamamen freeware olarak piyasaya sürülmüş bir yapıdır.

Öncelikli olarak Xbox 360’lara oyun geliştirme adı altında çıkmıştır. Daha sonra windows işletim sistemlerinde de oyun geliştirmeye olanak sağlayacak şekilde güncellemelerle son haline kadar gelmiştir. Şu ana kadar çıkan versiyonlarını sayacak olursak; Xna Game Studio 1.0, 1.1, 2.0, 3.0. 3.1 ve son olarak da yakın zamanda ciddi yeniliklerle gelmiş olan 4.0 versiyonu olmak üzere toplamda 6 farklı versiyonu bulunmaktadır. Ben bugün genel itibariyle 3.0’dan sonraki versiyonlar birbirine benzediğinden(4.0 biraz daha farklı) ve temelini de 3.0 oluşturduğundan dolayı bu versiyonun temellerinden bahsedeceğim.

Öncelikle Xna yi kullanabilmek için sistemimizde :

Visual C# Express Edition 2005/2008
Service Pack 1
veya sadece Microsoft Visual Studio 2008 kurulu olmak zorundadır. Daha sonra Xna alt yapısını kurarak oyun yazmaya hazır hale geliyoruz.

Biraz Xna’in diğer platformlarla olan benzerlik ve farklılıklarından bahsedelim. Piyasada bulunan büyük oyun firmaları oyunlarını yazarken genel itibariyle c++ dilini kullanmaktadırlar. C++’ın hem ortam bağımsızlığı hem de oyunlara katmış olduğu hız özelliği onu tartışmasız şekilde oyun geliştirme projelerinde favori bir dil olduğunu göstermektedir. Peki Xna ile C++ arasındaki temel farklar üstünlükler ve ya zafiyetler nelerdir? Evet, önceki cümlemde de bahsettiğim üzere c++’ın katmış olduğu hız ve portabilite onu Xna’e oranla güçlü kılmaktadır, ancak kod yapısının komplikeliği ve zorluğu da C++’ı amatör oyun geliştiricileri için çıkmaza sokmaktadır. Yani en basitinden 2 boyutlu bir oyunu yapmak için bile korkunç anlamda C++ bilgisi gerekmektedir. İşte Xna’in esnek yapısı burada biz amatörleri kucaklamaktadır. Basit yapısı ve kolay programlanabilme özelliği sayesinde, Xna kullanılarak yazılan kodların hem anlaşılması kolaydır hem de programcıya daha fazla esneklik kazandırmaktadır. En basitinden ekranda bir ağaç görüntüleyeceğinizi düşünelim. Bu iş için yazılacak kod satır sayısı olarak ortalama bir sayı verecek olursak:
C++ = 20 iken Xna= 7-8 civarındadır. Buradan bile Xna’in kullanıcı dostu olduğu görülmektedir. Evet, belki . Net platformu oyun programlamada hız açısından pek elverişli değildir ancak, yeni gelen versiyonlarıyla her gün gelişen ve büyüyen Xna çok geçmeden bu açığı da kapatacaktır.

Evet, şimdi gelelim Xna ile tanışmaya. Gerekli programların kurulumu ardından yeni bir Xna oyun projesi oluşturalım ve adını koyalım.



Ok dedikten sonra Xna platformuna girmiş bulunuyoruz. Xna içerisinde sadece kod yapısını ihtiva eden bir mimaridir. Yani sadece kodlama işlemi yaparak oyun programlamaya başlayacağız.

Şimdi yeni bir oyun projesi açtığımızda karşımıza çıkan kod yapısını detaylarıyla inceleyelim.

Karşımıza çıkan kod bloğunu ve herbir bloğun ne ifade ettiğini açıklamaya çalışacağım.



Yukarıda yazılmış olan bu namespace'ler kendiliğinden gelen kütüphanelerdir ve oyunumuzu yazabilmemiz için gereken herşeyi ihtiva etmektedir.

Bazılarını açıklayacak olursak:

// Audio: Ses ayarları.

// Content: Oyun içeriği, 2/3 boyutlu objelerin ekranda görüntülenmesi görevi.
// GameServices: Gerekli olan oyun servisleriyle olan köprü görevi.
// Graphics: Oyun içi temalarıyla ilgili bütün ayarlar.
// Input: Kullanıcı ile ilgili ayarlar.


// Game1 classımız, oyunumuzun main class’ıdır. Bütün code yapısı bu sınıf içerisinde ihtiva edilir. Game sınıfından türediği için, Game sınıfının bütün özelliklerini kullanabilmektedir.
// Oyun yapılandırıcısında(game1()) ekran kartına ulaşılacak sınıftan(GraphicsDeviceManager) bir nesne oluşturulur ve gerekli ayarlamalar yapılır.


// Initialize methodunda, oyunumuz başlamadan önce yapılacak son ayarlar set edilir.


// LoadContent, Grafik hazırlıklarının yapıldığı yerdir. Update ile birlikte en önemli fonksiyonlardandır.


// En önemli fonskiyonumuzdur. Oyunun kalbinin attığı yerdir Update sınıfı. Oyun zamanıyla paralel olarak bir güncelleme söz konusudur bu method içerisinde. Bir oyun içerisinde gerçekleştirilen tüm olayların kontrolünün yapıldığı yerdir.(Mesela player’ın yön tuşuna basıp basmadığı, ve buna göre tankımızın hareket edip etmediği gibi kontroller). Bunları ileride daha da açacağım.


// Draw sınıfı, tüm çizim işlemlerinin yapıldığı önemli sınıftır. Özelliklerini ileride daha da açacağım.

Var olan methodların override olmasının sebebini ise gayet basit olarak, her bir methodun update methodu ile bağlantılı bir şeklide çalışmasından ve mantık olarak da oyun akışının bunu gerektirmesinden dolayı olduğunu söyleyebiliriz. Size burada verebileceğim en büyük ip ucu, bu kodları adım adım çalıştırmanız ve kodlar arası hiyerarşinin nasıl gerçekleştiğini anlamaya çalışmanız, zira burası çok önemli.

Xna, gerekli görsel işlemlerin yapılabilmesi için de, kendi içerisinde bulunan ve “content pipeline” adı verilen bir yapıyla halletmektedir. Yapı kısaca şu şekilde işlemektedir. Xna’in, oyununuz için gerekli görsel dosyaları önce, içerisinde değerlendirip bu dosyaları kendisinin yorumlayıp ekran kartına gönderebileceği dosyalara dönüştürmesi gerekmektedir. İşte bu mekanizmayı gerçekleştiren Xna içerisindeki bu pipeline’dır. Bundan da yeri gelince bahsedeceğim zira kafaları karıştırmak istemiyorum.

Şimdilik burada bitiriyorum. Daha bitmedi devamı gelecek. Kendinize iyi bakın :)

Yorumlar

Bu blogdaki popüler yayınlar

Socket Kavramı

Dönem Sonu ve Bitirme Projesi

Aselsan ve MetuTech Gezisi