Developersland

Teknoloji ve Yazılım Blogu

  • Yazıtipi boyutunu arttır
  • Varsayılan yazıtipi boyutu
  • Yazıtipi boyutunu azaltır

Javada Oyun Programlaması. Part 1 (Threadler-1)

javaİlk dersimizde Java’da oyun programlamanın genel kavramlarından ve oyunlarda çok kullanacağımız Java Threadlerinden bahsedeceğim. Neden Java? Aslında doğru, bir çok başka dillerin oyun programlama alanında Java’dan daha çok avantajı vardır (C++ ve onun için hazırlanmış olan OpenGL gibi onlarla kütüphane). Ama Java’nın yavaş çalıştığı iddiaları da artık eskimiş, Java 1.4’ten sonra Java ortamında bayağı bir değişiklikler artık Java’nın oyun geleceğinin olduğuna da bir kanıttır. Ve artık kısa bir araştırmayla Java için de yapılmış olan oyun framework’larını kolaylıkla bulabiliyoruz. İleriki derslerimizde Java’da oyun programlama’da kullanacağımız, oyuna katabileceğimiz 2D ve 3D grafik ve animasyonlara da değineceğim.


Thread Nedir?

Thread uygulamamıza veya kodumuza multitasking özelliği katan bir nesnedir. Kısaca değinmek gerekirse, biz oyunumuzda aynı anda bir kaç işlemi arka kodumuzda çalıştırmak istiyorsak o zaman Thread kullanmak zorundayız. Örneğin, oyunun bir kısmında kullanıcını bekletmemek ve aynı zamanda her Level başladığında arka arkaya 10 işlem yapmamız gerekiyorsa o zaman Thread’in bize sağladığı kolaylıklardan faydalanmalıyız, aksi halde 10 işlemi Thread’siz çalıştırmaya kalkarsak her işlemin 0.1 san çalıştığığını varsaysak toplam 1 saniye gecikmeye neden olabilir Thread’siz yazılmış kod. Ve oyunda arkada çalışacak olan kodları düşünürsek bu sadece her Level başında olmayacaktır, her kullanıcı interaction’unda olabilir. Kısacası oyun programlamasında thread kullanımı şart.


threadler




Java’da Thread yaratma ve çalıştırma

Java’da thread kullanımı çok kolaydır ve hem de, thread kavramının bize sunduğu çok özellik vardır Java’da. Yeni bir thread yaratma ve çalıştırmak için Thread sınfının yeni bir objesini yarartıp onun start methodunu çağırmamız yetiyor, ama tabii ki Thread sınfının run() methodu içine hiçbir işlem eklemediğimiz için bu yarattığımız thread bir işe yaramayacaktır


Thread th = new Thread();

th.start();


Thread’e işlem atayarak Thread yaratmanın 3 yolu vardır: 


1- Thread sınfını extend ederek

2- Runnable interface’ini implement ederek

3- Anonymous olarak aynı sınıf içerisinde



1- Thread sınfını extend ederek

Bunun için Java’nın Thread sınfını extend edip run() methodunu yeniden yazmamız gerekiyor.


public class MyThread extends Thread {


    public void run() {

        System.out.println("Do something...");

    }

}


Çalıştırmak için,


Thread th = new MyThread();

th.start();


yazmamız yeterli.


2- Runnable interface’ini implement ederek

Thread sınfından extend etme örneği bazı durumlar için bize uygun olmayabilir, örneğin, MyThread olarak adlandığımız sınfın başka bir sınfı da extend etmesini istiyorsak (sadece thread çalıştıralım diye ayrı bir sınıf yaratmak istemiyorsak) Java buna izin vermeyektir (Java’da her sınıf için sadece tek bir tane extend yapabiliyoruz). Bu durumda Runnable interface’ini implement edebiliriz.


public class MyClass extends SomeOtherClass implements Runnable {


    public MyClass() {

        Thread thread = new Thread(this);

        thread.start();


        //do something here...


    }

    public void run() {

        System.out.println("Do something...");

    }

}


Örneğimizde MyClass objesini yarattığımız zaman ilk olarak constructor’umuz çalıştırılacaktır, ki o da yeni bir Thread objesi yaratarak yeni bir işlem başlatacaktır. Thread sınfı Runnable cinsinden bir obje alıyor (this). 


3- Anonymous olarak aynı sınıf içerisinde

Bazı durumlarda yukarıda belirttiğimiz örneklerdeki gibi sınıf yaratmadan thread çalıştırmak isteriz. Bu durumda anonymous olarak bu sınfı kendi sınfımız içerisinde yaratabiliriz (P.S aslında sınıf yaratmış oluyoruz yine ama bu sınıf anonymous sınıf oluyor, yani daha sonra işimize yaramayacaktır).


new Thread() {

    public void run() {

        System.out.println("Do something...");

    }

}.start();


İçerisine uzun uzun kod yazmaya kalkarsak bu pek de iyi bir örnek olmayabilir - kod okunurluğu açısından. 


Eğitimin devamı...


 

Yorumlar  

 
0 #1 Seda 13-07-2012 15:52
Merhaba; yazınız için teşekkür ederim elinize sağlık. bende thread konusunu öğrenmek istiyorum. yani bu konuda daha çok yeniyim. yaptığım örnekte resmin soldan sağa doğru hareket etmesini istiyorum. pencere açılıyor. ama resim çıkmıyor. debug yapıp hatanın nerde olduğunu bulmaya çalıştım pencere oluştuktan sonra thread.exit() line not available hatası veriyor bu hatayı nasıl çözebilirim yardımcı olursanız çok sevinirim.
Alıntı
 
 
+2 #2 murat 27-09-2012 17:25
hacı adamlar oyun motoru diye bişe yazmış biz daha hangi dil performanslı diye tartısıyoz.Oyun programlama altında thread programlama anlatmak biraz gereksiz olmuş .Ne bilim Unity3d ,UDK,cryengine var flash oyun yapcaksan bir sürü kütüphane var mobil yazcaksan yine open source bir sürü kütüphane var .Yok ben fizik motoru yazcam ,yok multithread yapay zeka algoritmaları geliştircem diyosan o başka .Ama türkiyede bu seviyede iş zaten yapılmıyor.Bizim derdimiz zaten bu yürümeden koşmaya çalışıyoruz .Buraya biras püskürmek gibi oldu ama Oyun sektörünün içinde biri olarak olsun o kadar .Halimiz vasatın altında yani.
Alıntı
 
 
-1 #3 caner 21-10-2012 21:03
http://www.omerbektas.com.tr
burdan oyun programlama hakkında bilgi alabilirsiniz çok güzel eğitim videoları var
Alıntı
 
 
0 #4 karasakal 14-09-2014 08:29
Merhaba
Zaur arkadasimizin eline sağlık. Apache MINA ile java tabanlı oyun sunucusu geliştirebilirs iniz.
https://mina.apache.org/
Alıntı
 

Yorum ekle


Güvenlik kodu
Yenile