İlk Oyun – Araba Gezintisi

Bu yazıda ilk oyunumuz olarak sayılabilecek, basit, birkaç model içeren, kullanıcı kontrollü bir araba gezintisi oyunu yapacağız. Bu oyunu yaparken bundan önce yazmış olduğum yazılardan birçoğuna değineceğiz. Bu yüzden şimdiye kadar eğer bir konuda eksiğiniz varsa tamamlamanızı öneririm. Bu oyunu hazırladıktan sonra daha detaylı görsellik elde etmek için grafikleri ekran kartına çizdirmek üzere HLSL programlama diline giriş yapacağız.

Oyunu programlamaya başlamadan önce zemin oluşturması için Microsoft XNA programlama örneklerinden aldığım zemin dokusunu paylaşmak istiyorum. Aşağıdaki bağlantıdan gereken dosyaları indirip projenize ekleyebilirsiniz. İki dosyayı da projeye eklerseniz bir uyarı alacaksınız. Bu uyarının nedenini daha önceki oyuna bir model yüklenmesi sayfasında bulabilirsiniz.

XNA Checker Ground

Artık oyunumuzu programlamaya hazırız. İlk önce global olarak oyunda kullanacağımız değişkenleri tanımlayalım.

Dikkat ederseniz oyuncunun kullanacağı modeli models listesi dışında player olarak ayrı tanımladım. Bu tamamen keyfi bir seçimdir, isterseniz oyuncunun modelini de models listesi içinde tutabilirsiniz. Oyun ayarları ile ilgili farklı değişiklikler yapmak isterseniz, varsayılan kodun altına, Game1() yapıcı methodu içinde tanımlayabiliriz.

Daha sonra LoadContent() methodu içinde gerekli modelleri yükleyelim.

Burada bir adet takip kamerası (ChaseCamera), oyuncu için bir adet araba modeli ve zemin yüklenmektedir. Oyunda bulunan kameranın ve oyuncunun modelinin güncellemesi işlemlerini Update() methodu içinde gerçekleştireceğiz.

Daha sonra güncellenen modellerin çizilmesi, yani Draw() methodu işlemileri gelmektedir.

Burada dikkat edilmesi gereken bir durum vardır. Player modelini ayrı olarak tanımladığımız için foreach döngüsü dışında kalmaktadır. Models dizisi içinde kullanan programcılar için bu kısım gerekli değildir.

Kameranın güncellenmesi için gereken değerleri hesaplayan updateCamera() methodu ise şu şekildedir.

 Son olarak ise oyuncunun kontrollerine göre araba modelini güncellememizi sağlayan updateModel() methodu şu şekildedir. Bu kısım tamamen keyfi olarak programlanabilir. Böylelikle oyununuzun gerçekçiliğini yada hayal gücünüzün limitlerini deneyebilirsiniz.

Burada dönme kontrollerini gerçekleştiren “if” kodu içerisindeki positionChange.Length() değeri ile aracın ilerleyip ilerlemediği kontrol edilip, araç eğer ilerlemiyorsa dönmemesi sağlanmaktadır. Ancak burada aracın gezdirilmesi tamamen fizik kurallarından bağımsız, keyfi olarak ötelemelerden ibarettir. Gerçek fiziksel yapıları içeren bir oyun programlamak için JigLibX veya Henge3D gibi fizik motorlarına ihtiyaç vardır.

Son olarak oyunumuzun daha iyi grafik özelliklerini desteklemesi adına proje ayarları içerisinde küçük bir değişikliğe ihtiyaç vardır. XNA projeleri ilk açıldıklarında varsayılan olarak Windows Phone’da çalışabilir düzeyde oyunlar için ayarlı gelmektedir. Ancak mobil cihazlar tahmin edeceğiniz gibi her grafik özelliğini desteklememektedir. Bu yüzden oyunumuzu PC veya XBox için derlediğimizi proje ayarlarında belirtmeliyiz. Bu ayarı yapmak için projeye sağ tıklayarak “Properties” bölümüne girip, “XNA Game Studio” sekmesi altındaki “Use HiDef to access the complete API” seçeneğini aktif hale getirmeliyiz.

xna_game_profiles