Skip to main content

Bu bölümde temel 3D grafiklere, modellere ve kameralara giriş yapacağız. İleride oyun yapmamız için gerekecek faydalı sınıflar (class) ve sistemler yazacağız. Oyunlarda farklı durumlar için karşımıza çıkabilecek kamarelar oluşturacağız. Daha sonra performansı arttırmaya yönelik önemli bir sistem olan “View Frustum Culling” yöntemini inceleyeceğiz. Son olarak ise oluşturduğumuz bu sistemleri kullanarak, klavyeden kontrol edilebilen küçük bir araba gezdirme oyunu yapacağız.

Yeni Bir Proje Oluşturmak

XNA ile birşeyler oluşturmak için Visual Studio ve XNA Game Studio 4.0 edinip kurmanızı tavsiye ederim. Bu ürünlere aşağıdaki bağlantılardan ulaşabilirsiniz. Visual Studio 2012 ile çalışmak isteyenlerin ek olarak Windows Phone SDK’yı da kurması gerekmektedir.

1. Visual Studio ve XNA kurulumları doğru bir şekilde tamamlandıktan sonra, yeni bir proje oluşturarak başlayalım.

XNA 3D Yeni Proje Oluşturma

“3D Graphics with XNA Game Studio 4.0 | Sean James, Packt Publishing”‘e aittir.

2. Karşımıza gelen pencerede, sol kısımda “XNA Game Studio 4.0” seçeneğini seçip, orta bölüme gelen “Windows Game (4.0) Visual C#” seçiyoruz.

XNA 3D Yeni Windows Oyunu Oluşturmak

3. Tamam tuşuna bastığımızda karşımıza oyun projesinin ana dosyası olan “Game1.cs” dosyası gelecek. Bu dosya XNA oyunları için ana sınıftır (main class). Varsayılan olarak bu class kod çalıştırılınca çalışır ve içerdiği fonksiyonlar otomatik olarak tanımlı görevlerini yerine getirirler.

“Game1.cs” dosysında tanımlı fonksiyonların işlevleri şöyledir. Bu fonksiyonların tanımlı bir işleme sırası vardır. Bu sıralama programın yaşam döngüsü (life-cycle) olarak adlandırılır.

  1. Oyun başlarken önce “Initialize()” ve sonra “LoadContent()” fonksiyonları çağırılır. Initialize() fonksiyonu oyunda daha sonra kullanacağımız sabitler, bazı ön tanımlamalar vb. işlemler için idealdir. LoadContent() bölümü ise modellerin ve oyunun ilk çalışması için dışarıya bağımlı diğer dosyaların çağırılması için düşünülmüştür.
  2. Oyun ana döngüsü içindeki “Update()” fonksiyonu değişen değerlerin hesaplanmasının yapılması için ayrılan yerdir. Yani bu bölümde ilerleyen arabanın konumu, hızı, kameranın bakış açısı vb. hesaplamalar yapılabilir. “Draw()” fonksiyonunda ise LoadContent() kısmında dışarıdan alınan modellerin çizilmesi için gereken kodlama yapılır. Draw() ve Update() fonksiyonları sonsuz bir döngü ile birbirine bağlıdır ve sürekli birbirlerini çağırırlar. Böylece oyun kapatılana kadar modeller sürekli güncellenerek çizilmeye devam eder.
  3. Son kısımda bulunan “UnloadContent()” fonksiyonu ise oyun kapatılırken çağırılır. Bu fonksiyon içerisinde yüklenen modellerin temizlenmesi, gerekiyorsa oyunun kaydedilmesi vb. işlemler yapılabilir.
XNA Yaşam Döngüsü

“3D Graphics with XNA Game Studio 4.0 | Sean James, Packt Publishing”‘e aittir.

Otomatik olarak oluşturulan Game1.cs sınıfında oldukça fazla yorum bulunmaktadır. Bu yorumlar yukarıda yazılmış olan açıklamarı içerir ve oyunun çalışması için gerekli değildir. Sadeleştirilmiş oyun sınıfı şu şekildedir.

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

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

    protected override void LoadContent()
    {
    }

    protected override void Update(GameTime gameTime)
    {
        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        base.Draw(gameTime);
    }
}