Java ME oyun geliştiricilerine bir öneri

____________________________________________________________________

Kullandığım Toshiba G500 telefonda Windows Mobile işletim sistemi var ve Esmertec Jbed ile Java ME uygulamalarını çalıştırıyorum. Yalnız bir problem var ki bu yazılım bir oyun oynamaya kalkınca tüm işlemci zamanını sömürebiliyor, bu durumda da çoğu oyunda oyun oynarken arka planda müzik çalması imkansız. Önerim de bu nokta ile ilgili.

Java ME üzerinde oyunlarınızı geliştirirken oyunun işlemci hızına bağlı olarak değişebilecek değişkenlerini sınırsız hızda çalışacak şekilde ayarlamayın. Örneğin; oyun 10 FPS ile de problemsiz oynanıyorsa bunu telefonun 60 FPS ile oynatması çok önemli değildir. Bu sadece işlemci üzerindeki yükü arttırır.

Java ME geliştiricisinin yapması gereken ise oyununu farklı ekran çözünürlüğüne ve işlemciye sahip birkaç aygıtta denemesi ve bunlara göre oyunun çalışabileceği bir FPS miktarı seçmesi. Yani oyun tüm işlemci kaynağını kullanarak çalışmak zorunda olmamalı, kendine göre yeterli bir FPS hızında sabitlenmeli ve bunun üzerine çıkmamalı.

Oyun örneğin ekranın çözünürlüğüne bakmalı, gerekirse ufak bir grafik testi yapıp cihazın kaç FPS çıkarabileceğini öğrenmeli. Ondan sonra da bu FPS değerine göre kendine bir FPS değeri belirlemeli ve oynanırken de bunun üzerine çıkmamalı. Bu sayede oyun oynanırken işlemci kullanımı da daha düşük tutulabilir. Bu da ayrıca bataryanın boşalma hızını da yavaşlatır, yani bu oyun diğerlerine göre daha uzun süre oynanabilir.

Bunu yazmaya demin fırına ekmek almaya gittiğimde karar verdim (ne alaka değil). Ekmeğin gelmesi biraz zaman alacağı için bir süre bekledim. Bu sürede millet etrafa bakınıyor, birbirini tanıyanlar sohbet ediyordu vs. Ben ise telefonda Juiced 2 adında bir araba yarışı oynuyordum. Bir ara bu oyunu oynarken arka planca müziğin çalabildiğini fark etmiştim. Ben de acbTaskMan uygulaması ile uygulamanın işlemci kullanımını ölçtüm. Tüm işlemciyi kullanan diğer oyunlarda işlemci kullanımı %100 olurken bu oyunda işlemci kullanımı % 60 – 80 arasında seyrediyor. TCPMP programı da OGG çalarken %11 kadar işlemci kullandığına göre arka planda müzik çalmaya da işlemci zamanı kalıyordu.

Juiced 2Juiced 2

Juiced 2 MIDP 1.o profilinde bir 3D araba yarışı oyunu, biraz NFS mantığında para kazanma, araç satın alma vs. özellikleri var. Bu oyunun bu şekilde tam işlemci kullanmadan çalıştığını görünce bunun sebeplerini düşündüm. İlk olarak da aklıma bu FPS meselesi geldi. Öyleki bazı oyunlarda oyun geliştiricinin telefonunun hızına uygun olduğu için ekrandaki öğeler oynanamayacak kadar inanılmaz hızda hareket ediyordu.

Juiced 2 ekran görüntüsüJuiced 2 ekran görüntüsü

Bir başka tavsiye de bellek kullanımına yönelik. Java’da Garbage Collector (Çöp Toplayıcı) diye bir yapı bellekte artık kullanılmayan yada artık referansı bulunmayan nesneleri belleğin heap alanı azaldığında temizleyen bir yapı. Bunun oyunlarda düzgün çalışabilmesi için bir kez oluşturduğunuz bir nesne ile işiniz bittiğinde o nesneyi öldürün ki Çöp Toplayıcı onun artık kullanılmadığını anlayıp silsin, bu oyunlarda yarışın bir kısmında Çöp Toplayıcı’nın bellekteki nesnelerin referanslarını kontrol etmesini kolaylaştırır ve de daha boş bir bellek sağlar. Bunu yapmak için de o nesnenin referansına null değer vermeniz gerek. Yani örnek bir metin adlı String nesnesi için şu kod onu öldürecektir;

metin = null;

Bunlar gibi daha birçok iyileştirme tekniği var ancak benim yazıyı yazma amacım bu değil, sadece işlemci kullanımını düşük tutmak amacıyla bir öneri vermekti.