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 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ü
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.
