XNA Geliştirin Diye Starter Kit Sunuyor

Bir kaç yerde gördüm XNA ile yapılmış oyunlar var. Starter Kit’ler üzerinde görsel modifiye yapılarak dağıtıma sunulmuş bir sürü oyun. Modifiye etmeyi oyun yapmak ile karıştırıyorlar, o rahatsız ediyor beni. Öyle olsa bende Platformer Starter Kit’i kullanarak sadece arka plandaki resimleri değiştiririm oldu size Türk oyunu. Piyasada böyle çok paket var ama satılırken bunlar paket olarak satılmıyor. Türk oyunu deniyor. Var olan oyunların data’larıyla oynayarak yapılan çalışmalar modifikasyondan öteye gitmez. Belki çok güzel bir modifikasyon yaparsınız ama o oyuna ayrı bir oyun diyemezsin şu oyunun mod’u dersiniz.

Dün bilişim rüzgarı programında bir kaç arkadaş konuşuyor “oyun yaptık, baya bir modifikasyona gittik” diyorlar. Güzel ama sonra içlerinden biri amaçlarının ilk öğretimde ki öğrencilere oyunlar sunmak olduğunu, şu an oynanan oyunların pek iyi olmadığını, basit olduğunu söyledi. O noktada tepem attı. Üniversite öğrencisi bir arkadaş herhalde benden büyük değildir ya da yaşıtızdır; ne hakla bu öğrenci diğer oyunları değerlendiriyor? Nasıl basit diyebiliyor bu oyunlara çok merak ediyorum. Hemen otorite mi olundu starter kit kullanılarak bir oyun yapıldıktan sonra? Şimdi arkadaşı bir kenara bırakarak söylüyorum, bu tarz insanları hiç sevmem eğer onlardan biriyseniz kusura bakmayın. Her şeyi eleştirebilirsiniz ama değerlendirip iyi-kötü deme ya da not verme noktasına gelirseniz size “Çizmeyi aşma!” demek zorunda kalırım. Bir oyuncu olarak beğenip beğenmeme hakkına sahip olabilirsiniz ama not vermek için otorite olmanız gerekir. Otorite, çalışmalarıyla kendini kabul ettirmiş, başarılı kimse demektir ki ben ortada bir otorite göremedim… Amatörce yapılmış bir sürü site otorite oluyor oyun konusunda, peh. Ya da sadece üniversitenin ilgili bölümünden mezun olan birisi herhangi bir programa not veriyor, geliştiricilere kötü diyor falan… Ne zaman otorite olduğu belli olmayan bu tarz kişiler sadece kendilerini tatmin etse sorun değil. Onları cidden otorite sananlarıda yanlış yönlendiriyorlar.

Bir de şu program devlet kanalında yayınlanıyor ne zaman görsem MS ürünleri hakkında konuşuluyor. Tamam MS’u bende severim ürünlerini kullanırımda yıllardır arada sırada seyretmeme rağmen bir kere bile Linux dağıtımları hakkında bir program neden görmem? Devlet kurumu olan TÜBİTAK bir dağıtım geliştiriyor ve bu devlet kanallarının umurunda değil! Ben olsam 7/24 Pardus’un reklamını döndürürdüm kanallarda. Sevmiyorum bu yüzden bu tarz işleri… Bir iş yapıcaksan tam yap kardeşim, kurumlar bir birlerini desteklemeli aynı vatandaşın parasıyla iş yapıyorsunuz ama bir birinize yardım etmiyorsunuz. Öpüyorum sizi…

Not: Birisi küfürlü bir yorum yapmış önceki yazılardan birisine. Yorumlar önce benim onayıma geliyor, yayınlanmadı. Yayınlamadığım ilk yorumun sahibini tebrik ediyorum.

XNA Music Play

Başlık İngilizce olduğu için kusura bakmayın. Çift dil olabilir yazı ilerde 🙂 Neyse, oyunlarda önemli olan öğelerden biridir müzik. Bu yazıda basitçe müzik oynatmayı öğreneceksiniz. Bu basit sistemi farklı fonksiyonlar kullanarak ileride diğer bölümlere adapte edebiliriz şimdi sadece temelini öğrenelim. Bu işi yapmak için LoadContent() metodunda çalışacağız. Öncelikle şarkımızı içeriğe ekleyelim. Tıpkı Backgrounds gibi şimdi Sounds isimli bir klasör açalım Solution Explorer’ı kullanarak ardından çalmak istediğimiz dosyayı yine sürükle bırak mantığı ile klasörün içine bırakalım. Ben Blind Guardian – Time Stands Still parçasını koydum. MP3 çalıyor mu merak ettim zira örnekte WMA formatı kullanılıyordu. Neyse LoadContent kısmına şu kodu ekleyin:

http://sudrap.org/paste/text/135/
şeklinde olacak.

MediaPlayer.IsRepeating = true; Bura MediaPlayer metodunun IsRepating özelliğini kullanıyoruz. Şarkı bittiğinde tekrar çalmasını sağlıyor.

Alt satırdaki kısmı yazamıyorum ama ordada içeri normal şekilde yüklüyoruz. F5’e basıp çalışdırdığımızda müzik çalıyor performansta bir kayıp olmuyor.

This article using 2(english, turkish) language. Music is a must in games. At this text you will learn how to play music with XNA. First of all you must add your file in the Content list at the Solutionn Explorer. Open a new directory with right click on the content section and add new folder. Make its name “Sounds” than drag/drop your music file on this folder. I choose Blind Guardian’s Time Stands Still song for trying to play a MP3 file. after that:

http://sudrap.org/paste/text/135/ use this in LoadContect section for playing sound

MediaPlayer.IsRepeating = true; this cause to repait our song MediaPlayer funciton is easy to learn 🙂

I cant write next line in blogger so i just explain what it means, you load content like any other one. You gave the music adress, “Sounds/AndSong’s Asset Name”After you wrote this code save file and press F5, you will hear the song and when it finished the music will start again till you close the game.

XNA Background

Ufak ufak notlar alıyorum. XNA konusunda Türkçe fazla kaynak yok, bari biz yazalım. Bu yazıda basitçe bir background oluşturacaz ve bunu oyunumuzda görüntüleyecez. Başka hiç bir amacımız yok ona göre 🙂 Öncelikle yeni bir WindowsGame projesi açın sayfa oluştuktan sonra sağda Solution Explorer penceresi olmalı eğer yoksa menüden Wiew’a tıklayın oradanda Solution Explorer’a böylece gözükecek. Neyse, genelde oyunda tek bir background(arka plan) olmadığından bu dosyalar ayrı bir klasörde tutulur. Bizde öyle yapalım, content sekmesine sağ tıklayıp add-new folder yapın ardından oluşan klasöre “Backgrounds” adını verin. Arkaplan olarak kullanacağınız resmi bulun png formatı iyidir, örneklerde bu kullanılmış genelde. Bulduğunuz dosyayı sürükle bırak mantığı ile programın içersindeki backgrounds klasörü üzerine atın. Böylece listeye eklenmiş olacak. Bu örnekte dosyanın adı Layer1.png ama kodun içersinde Layer1 olarak konulacak. Explorer da dosyanın üstüne tıklarsanız Name Asset: Layer1 yazar, oradaki özelliği kullanıyoruz dosyanın adresini değil.

Şimdi sıra geldi kodlamaya. Mantık şöyle demiştim: önce yükle sonra çiz. Bu yüzden Game1.cs isimli dosyamızı düzenleyelim. Load content kısmı şöyle olacak:

http://sudrap.org/paste/text/132/ şeklinde olacak bu kısım

Burada spriteBatch kısmı otomatik olarak oluşturulmuş halde geliyor. Biz sadece backgrounTest isimli bir nesne oluşturduk ve bu nesneye Backgrounds isimli klasördeki Layer1 isimli nesneyi yüklettik. Şimdi gelelim Draw kısmına:

http://sudrap.org/paste/text/131/ şeklinde olacak bu kısım

En üst ve alt satır otomatik olarak geliyor. Biz aradaki kızmı yazdık. Burada sahnemizi başlatıyoruz ardından arka planın pozisyonunu belirleyen “pos” nesnesini oluşturuyoruz. Sonra sahnemizin için backgroundTest nesnemizi yüklüyor ve pozisyonu ile default rengini belirliyoruz. Sonra sahneyi sonlandırıyoruz.(c#’da ne deniyor tam bilmiyorum isimlere takılmayın) spriteBatch’a bir şeyleri çizme görevini Begin ile verdik Draw ile görevi yerine getirdik End ile görevi bitirdik. Şimdi dosyayı kaydedip F5’e basalım.

Blogger içersinde c# kodları nasıl yazılır bilen varsa mail atsın: [email protected] bende başka bir yere yapıştırıp link vermek zorunda kalmam. İyi çalışmalar 😉

XNA Başlangıç Metotları

Visual Studio ile yeni bir proje başlattığımızda ana dosyamızın içersinde bir kaç metot var. Bu yazıda bu metotlardan bahsetmek istiyorum zira oyunu geliştirirken temelde bu metotları kullanıyoruz. Bu yazı hem yeni başlayanlara işin mantığı konusunda bir fikir verebilir. Bunun yanında Microsoft’un bizlere sunmuş olduğu örnekleri de incemekte fayda var ama o konu sonra.

PyGame yazılarını okumuş olanlar ya da başka bir platformda oyun programlayanlar için oldukça kolay gelecektir. Şimdi açtığımız Windows Game uygulamasında Game.Cs isimli dosyaya tıklayalım. Kullanılan sınıflar falan geçelim, isimlerinden belli zaten ne oldukları 🙂 ilk metodumuz şu satırda:

protected override void Initialize()

Initialize() metodu oyunu başlamaya hazır hale getirdiğimiz bölümdür. İlk ayarların yapıldığı bir kısım gibi düşünebiliriz burayı. Oyun başlamadan önce yüklenmesi gereken içeriği veya servisleri buradan yükleyebilirsiniz.

protected override void LoadContent()

LoadContent() metodu oyun için gerekli olan tüm objelerin yüklenmesini sağlar. Şu aşamada oyunu yüklemiş oluyoruz. PyGame’de sahneyi yüklediğimizi hatırlayın. Onun gibi bir şey.

protected override void UnloadContent()

UnloadContent() ise oyundan çıkış aşamasında uygulanan bir metotdur. Oyundan çıkarken kullanıcıya “emin misiniz?” şeklinde sorulan soruların eklendiği bir kısım diyebiliriz.

protected override void Update(GameTime gameTime)

Update() metodu ise oyun sırasında bir güncelleme yapmanızı sağlar. Kullanıcı ile etkileşim, veri girişi, ses çalma gibi aktiviteler için gerekli fonksiyonlar bu bölümde barındırılır. Bu oyun oynanırken çalışan bölümdür ne load edersiniz ne unload oyun içersinde zaman kontrolünü gameTime ile sağlarsınız.

protected override void Draw(GameTime gameTime)

Draw() metodu adından anlaşılacağı gibi çizimlerimizin yapıldığı kısımdır. Draw modülü vardı tey tey sattık Python’u da C# ile uğraşıyoruz hehe. Bunlar temel metotlardır arkadaşlar yeni proje açtığınızda bunlar hazır halde gelir. Platformer örneğinde olduğu gibi(XNA Developer Center üzerinden indirebilirsiniz) bunlara yardımcı çeşitli metotları bizlerde kendi oyunlarımız için geliştireceğiz. Çizim yeteneğim sıfıra yakın olduğundan sanırım ilerki yazılar bu bahsettiğim örnekler üzerinden ilerleyecektir.

WPFBrowser Application vs Silverlight

Visiual Studio üzerinde çalışırken bu neymiş diye bir bakıyım dedim. Web uygulamalarıda geliştirilebildiğini biliyodum ama bu kadar rahat olduğunu bilmiyordum. Programı kullandıkça daha da hayran oluyorum. WPFBrowser uygulamalarını kendimce silverlight ile karşılaştırmam gerekti. İkisininde benzer bir iş yaptığı düşünülebilir ki temelde öyle. İkiside XAML tabanlı ve browserda çalışmakta. İkisi arasında ki fark WPF’yi çalıştırmak için sisteminize .Net ortamını kurmuş olmanızın gerekmesi. Silverlight için player gibi bir eklenti kuruyorsunuz o kadar. Bu Silverlight’ı cross platfrom yaparken WPF’nin sadece windows yüklü makinelerde çalışması demek. Umursamayanlar olabilir ama ticari uygulamalar geliştiricek kişiler için bence Silverlight daha iyi bir seçenek. Dökümanı da sağlam hani 🙂

GmsPlay Versiyon 0.1

Programı geliştirirken esas amacım Tv yayınlarını izlettirmekti. Fakat tüm televizyonların bu yayınları özgürce dağıtmadıklarını öğrendikten sonra bu özelliği programdan kaldırdım ve onu sade bir shockwave görüntüleyiciye dönüştürdüm. Örnek olması açısından uygulamayı GPL ile yayınlıyorum.

Programı çalıştırmak için elbette .Net Framework’ü gerekmekte. Setup oluşturmakla uğraşmadım. Programı indirip içersindeki Deneme123 isimli dosyayı çalıştırmanız yeterli olacaktır.

Dosya açmak için sol üst köşedeki menüyü kullanabilirsiniz.

Proje sayfasına ulaşarak programı indirebilirsiniz.

C# adı – CTS Karşılığı -Açıklama- Max ve Min Aralık
sbyte System.Byte 8 bit işaretli tamsayı -128 : 127
short System.Int16 16 bit işaretli tamsayı -32.768 : 32.767
int System.Int32 32 bit işaretli tamsayı -2.147.483.648 : 2.147.483.647
long System.Int64 64 bit işaretli tamsayı -9.223.372.036.854.775.808 : -9.223.372.036.854.775.807
byte System.Byte 8 bit işaretsiz tamsayı 0 : 255
ushort System.UInt16 16 bit işaretsiz tamsayı 0 : 65.535
uint System.UInt32 32 bit işaretsiz tamsayı 0 : 4.294.967.295
ulong System.UInt64 64 bit işaretsiz tamsayı 0 : 18.446.744.073.709.551.615
float System.Single 32 bit tek kayan sayı +yada – 1,5*10-45 : + ya da – 3,4*1038
double Sytem.Double 64 bit çift kayan sayı +yada – 5*10-324 : + ya da – 1,7*10308
decimal System.Decimal 128 bit ondalıklı sayı +yada – 1,5*10-28 : + ya da – 7,9*1028
bool System.Boolean true ya da false
char System.Char Karakterleri temsil eder 16 Unicode karakterleri

not
cts: common type system, not etmiş olayı lazım oluyor

XNA Game Studio 3.0

XNA yazısından sonra meraktan çatladım ve kotamın dolu olmasına rağmen Game Studio 3.0’ı indirdim. İlk olarak express edition’ı indirmem gerektiğini düşüp hata ettim çünkü o VS 2005 Express Edition içinmiş oysa bendeki 2008. Bu bir eklenti gibi düşünülebilir, var olan visual studionuza gerekli paketler yükleniyor. Bunun yanı sıra ses kontrol programları gibi çeşitli araçlarda mevcut. Developer Center da çeşitli örnekler mevcut, bu örnekleri kullanarak olayın mantığını kavrayabilir ve kendi oyunumuzu geliştirebiliriz. Ben şimdilik 2D olayları nasıl işliyor ona bakıyorum 🙂 Nasıl oyunlar yapılabileceği konusunda bir ss ekledim. Size iyi bir fikir verebilir.

XNA Nedir?

XNA nedir? Yenir mi içilir mi? Bu yazıda sorulara cevap vermeye çalışacağım. C#’a başlamam ile birlikte neler yapabileceğimi araştırmaya başladım. Bir önceki yazıda resimde gördüğünüz proje gibi masaüstü uygulamaları, db uygulamaları geliştirilebileceği gibi C# ile oyun da yazabilirmişiz. C++’a göre birazcık yavaş kalıyor diyorlar ama Python kadar değildir, PyGame yazılarında bahsetmiştim bu konuda. Neyse geçeyim ne olduğu konusuna. XNA kelimesinin açılımı:

XNA’s Not Acronymed – XNA Bir Kısaltma Değil!

Şaka değil gerçek. Bu sadece bir isim, kısaltma değil. XNA’yı bir çatı olarak tanımlayabiliriz. .Net alt yapısını ve C# dilini kullanıyor ve PC ve XBox 360 için oyun geliştirmeye yarayan çeşitli araçları barındırıyor. PC derken tabiki Windows işletim sistemi kullanan bilgisayarlardan bahsediyorum, XNA kullanarak yazdığınız bir oyunu çalıştırmak için bilgisayarda hem XNA hem de .Net 2.0’ın kurulu olması gerekiyor.

2004 yılında San Jose kentinde yapılan oyun geliştiricileri konferansında duyurulan XNA günümüze kadar gelişmesine devam etti. Microsoft XNA Game Studio adlı bir araç bile çıkardı ve sıkı durun Express versiyonu ücretsiz olarak indirilebiliyor! PC için yapılan oyunlarda herhangi bir şart aranmazken Xbox için oyun yaparken kulüp üyeleği almanız gerekiyor(4 aylık 49, senelik 99 dolar). Bunun dışında dediğim gibi pc oyunları için herhangi bir lisans ücreti ödemeniz gerekmiyor. Bir sürü kütüphaneyi kullanabiliyor ve Microsoft’un kurduğu Developer Center sayesinde dökümanlara ve örneklere ücretsiz bir şekilde ulaşabiliyorsunuz.

Bu konuda fazla Türkçe kaynak olmadığı için bu yazıyı yazıyorum. Şuan XNA ile bir şeyler yapmaya çalışmıyorum ama “belki” önümüzde ki ay ya da Nisan ayında bu konu ile ilgili çeşitli yazılar yazmaya başlar ve “belki” ufak bir oyun yazmaya çalışabilirim! O zamana kadar önceliğim başladığım projeyi bitirip ilk versiyonunu dağıtmak.