10 Nisan 2014 Perşembe

Oyun yapımında:Java vs C++ vs C#

Bilindiği üzere dünyadaki en popüler oyun yapımı dili C++. Bunun nedeni çok düşük seviyeli bir dil olması ve donanımlarla etkileşime girme konusunda çok önde olması ve bunun yanında Assembly kadar alt seviyede bir dil olmadığı için "görece" hızlı geliştirilebiliyor. Her platformda platforma özel çalıştırılabilen kodlara derlenen C++ kodları bu yüzden cross platform değil. Yani Linux için yaptığımız bir oyunu Windows platformunda çalıştıramıyoruz.

C++ kodlarımızı her platformda ayrı ayrı derlememiz gerekiyor. Ancak bunu aşmanın bir yolu da farklı platformlarda derlenmiş kütüphaneleri kullanmak. (bkz: Irrlitch Engine)

C# ise Microsoft'un .Net platformunun temel dili olarak kurguladığı dil. XNA ile bir dönem C#'ın oyun stüdyoları için önemi çok fazla artmıştı. Daha sonra XNA desteği PC'den Xbox tarafına doğru kaydırılınca bu azaldı. Ancak tabii ki XNA ile PC için oyun yapmak mümkün.

C#'ın en kötü yanı ise Microsoft'un sadece Windows platformuna destek vermesi. Bu demek oluyor ki yaptığınız oyunları sadece Windows altında ve .Net Framework'un uygun sürümünün yüklü olduğu bilgisayarlarda çalıştırabileceksiniz.

Gelelim Java'ya. Java Web sitelerinde ve kurumsal veritabanı uygulamalarında sıkça kullanılan çok platformlu bir dil. (cümlem biraz dağınık oldu). Java ile yazdığınız kodlar Java Bytecode'a çevrilir ve herhangi bir Java (JVM) yüklü platformda çalışabilir ki bu da sizi platform ile ilgilenmekten kurtarır.

Evet buraya kadar dillerin temel özelliklerinden bahsettik peki bir adım daha yakından baktığımızda neler göreceğiz?

Öncelikle Java ve C#'ta Garbage Collector var. Bu da kullanılmayan nesnelerin ya da kullanımı bitmiş olan nesnelerin Ram'lerde tutulmayıp temizlenmesi demek. C++'ta bu işi kendiniz yapmak zorundasınız (bkz: malloc) Ayrıca bu işin yapımında yaptığınız bir hata bilgisayar kaynaklarını etkileyeceğinden, bilgisayarın performansını (tabii ki kapanıp açılana kadar) düşürür. Ancak Java ve C# bu işi sizin için kendi yapar. Yine de şunu belirtmekte fayda var: eğer oyun geliştirme ekibi yeterince büyükse ve tecrübeleri bunun için yeterliyse, kullanılan kaynak daha az ve performans Java ve C#'a kıyasla çok daha büyük olur.

Performans yönünden şöyle bir kıyaslama yapabiliriz. Java asla bir oyun yapım platformu/dili olarak kendini konumlandırmadı. Daha sonra yazılımcıların taleplerine cevap olarak birtakım özellikler eklendiyse de hala bir oyun yapım dili olduğunu söylemiyor.

Her ne kadar artık JVM çeşitliliğine gelmiş olsak da (Eskiden bir tek Sun JVM vardı, şuan openJDK, Oracle vs çeşitli JVMler var) bunlardan hala kendini oyun için konumlandıran yok. Gerek C# gerekse Java donanıma yeteri kadar yakın değiller bu yüzden ekran kartlarında herhangi bir olaya gerektiği kadar müdahale edemiyoruz.

Bir faktör var ki günümüzde önemi iyice arttı:
Geliştirme Hızı: Artık yapılacak oyun/yazılım fikirleri ortalarda dolanıyor. Yani yapılacabilecek şeyler belli. Önemli olan bunları hızlı bir biçimde piyasaya sokabilmek. Bu yönüyle baktığımızda küçük ekipler için C++ bir adım geriye düşüyor. Ancak büyük ekiplerde bu fark tabii ki kapatılabilir.

Sonuç olarak yapılan oyunlara baktığımızda, Java'nın Runescape, Minecraft gibi oyunların kullanılan dili olduğunu görüyoruz.(Jeb_ ve Applet'i :) ) Javanın bu denli devasa yapıları kaldırabiliyor olması, onu daha da öne çıkarıyor. Bu nedenle oyun yapımlarında kendi tercihim Java oluyor.

Hiç yorum yok:

Yorum Gönder