Şimdi Ara

Java da iyi Olanlardan Yardım Bekliyorum.(Thread ve Graphics içerir.)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
9
Cevap
0
Favori
404
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar yapmam gereken bir proje var fakat çalışma mantığını kafamda oturtamadım(Java da çok tecrübem yok).

    Öncelikle sorunumu kısaltıyım size bunun çözümünü oturtabilirsem gerisini hallederim diye düşünüyorum.

    3 Tane yol çizdim paintComponent fonksiyonunu override ederek ve bu yolların her birinde yeşil veya kırmızı olarak değişen ışıklar var.

     
    class PanelSetter extends JPanel {

    public Road Road1 = new Road(true);
    public Road Road2 = new Road(true);
    public Road Road3 = new Road(false);

    @Override
    public void paintComponent(Graphics g) {
    super.paintComponent(g);


    //Fixed Roads Drawing.
    g.setColor(Color.BLACK);
    g.drawLine(50, 100, 200, 100);
    g.drawLine(50, 130, 200, 130);

    g.setColor(Color.BLACK);
    g.drawLine(50, 210, 200, 210);
    g.drawLine(50, 240, 200, 240);

    g.setColor(Color.BLACK);
    g.drawLine(50, 320, 200, 320);
    g.drawLine(50, 350, 200, 350);


    //Road 1 Light.
    if (Road1.getLight()) {

    g.setColor(Color.GREEN);
    g.fillOval(180, 70, 20, 20);

    } else {
    g.setColor(Color.RED);
    g.fillOval(180, 70, 20, 20);

    }
    //Road 2 Light.
    if (Road2.getLight()) {
    g.setColor(Color.GREEN);
    g.fillOval(180, 180, 20, 20);

    } else {
    g.setColor(Color.RED);
    g.fillOval(180, 180, 20, 20);

    }
    //Road 3 Light.
    if (Road3.getLight()) {
    g.setColor(Color.GREEN);
    g.fillOval(180, 290, 20, 20);

    } else {
    g.setColor(Color.RED);
    g.fillOval(180, 290, 20, 20);

    }

    }
    }


    Road objelerini JPanel den inherit alan bir classta oluşturdum ne kadar doğru bilmiyorum aklımda olan main de yaratmaktı fakat java böyle işlemiyor sanırım.

    Soruma gelirsek bir tane yola araba eklemek istiyorum çizgi şeklinde.Araba bir thread olucak, thread 2 saniye uyuyup devam edicek yol bitene kadar.
    Bu implementasyonu nasıl yaparım ? Yine bu panel içinde Vehicle threadleri açmayı düşündüm fakat modülerlikten çok uzak ve uygulanabilir mi kestiremedim.Sizlerin fikri nedir ?







  • Entropii kullanıcısına yanıt
    Ben acikcasi sorunu anlayamadim. Nasil thread ile araba olusturacagini mi soruyorsun, yoksa thread ile tek arabayi kontrol etmem mantikli mi diye mi soruyorsun ?
    Eger ekranda hareket eden cok obje yoksa her biri icin thread acman cok yanlis olmaz. Ama bu isin bestpractise i su, "Movement" 'tan sorumlu bir thread, tum "Moveable" olan objectlerin listesini tutup ( Observer pattern kullanabilirsin ) her frame oncesinde bu listedeki elemanlarin bir sonraki konumunu hesaplayip cizdirir. Boylece istedigin kadar object ekleyebilirsin ve hareketler daha smooth olur. Su haliyle gereksiz CPU cycle tuketecek. Gerci cogunlugu Thread.sleep ile gececegi icin bunu optimize eder isletim sistemi ama normalde oyunlardaki hareket eden onlarca obje bu mantikla cizdiriliyor.

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: Mephalay

    Ben acikcasi sorunu anlayamadim. Nasil thread ile araba olusturacagini mi soruyorsun, yoksa thread ile tek arabayi kontrol etmem mantikli mi diye mi soruyorsun ?
    Eger ekranda hareket eden cok obje yoksa her biri icin thread acman cok yanlis olmaz. Ama bu isin bestpractise i su, "Movement" 'tan sorumlu bir thread, tum "Moveable" olan objectlerin listesini tutup ( Observer pattern kullanabilirsin ) her frame oncesinde bu listedeki elemanlarin bir sonraki konumunu hesaplayip cizdirir. Boylece istedigin kadar object ekleyebilirsin ve hareketler daha smooth olur. Su haliyle gereksiz CPU cycle tuketecek. Gerci cogunlugu Thread.sleep ile gececegi icin bunu optimize eder isletim sistemi ama normalde oyunlardaki hareket eden onlarca obje bu mantikla cizdiriliyor.

    Cevabınız için teşekkür ederim faydası oldu.
    Sorum şuydu yol üzerinde arabaların gui de ilerlemesi lazım 3 yol var 3 araba olsun elimizde her biri 0.5 sn uyuyup sonra ilerleyecek. Arabaları küçük çizgiler olarak oluşturdum.
    Gui için ise applet lere göz attım, appleti fonksiyon içinde arabalara parametre olarak gönderip, arabanın hızına göre position ını arttırıp tekrar o applettin repaint() ini çağırmayı düşünüyorum.
    Fakat 10 thread syncronize olarak( sleep edip uyandırarak ) repaint() i çağırsa bir sorun çıkar mı emin olamadım.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: Entropii


    quote:

    Orijinalden alıntı: Mephalay

    Ben acikcasi sorunu anlayamadim. Nasil thread ile araba olusturacagini mi soruyorsun, yoksa thread ile tek arabayi kontrol etmem mantikli mi diye mi soruyorsun ?
    Eger ekranda hareket eden cok obje yoksa her biri icin thread acman cok yanlis olmaz. Ama bu isin bestpractise i su, "Movement" 'tan sorumlu bir thread, tum "Moveable" olan objectlerin listesini tutup ( Observer pattern kullanabilirsin ) her frame oncesinde bu listedeki elemanlarin bir sonraki konumunu hesaplayip cizdirir. Boylece istedigin kadar object ekleyebilirsin ve hareketler daha smooth olur. Su haliyle gereksiz CPU cycle tuketecek. Gerci cogunlugu Thread.sleep ile gececegi icin bunu optimize eder isletim sistemi ama normalde oyunlardaki hareket eden onlarca obje bu mantikla cizdiriliyor.

    Cevabınız için teşekkür ederim faydası oldu.
    Sorum şuydu yol üzerinde arabaların gui de ilerlemesi lazım 3 yol var 3 araba olsun elimizde her biri 0.5 sn uyuyup sonra ilerleyecek. Arabaları küçük çizgiler olarak oluşturdum.
    Gui için ise applet lere göz attım, appleti fonksiyon içinde arabalara parametre olarak gönderip, arabanın hızına göre position ını arttırıp tekrar o applettin repaint() ini çağırmayı düşünüyorum.
    Fakat 10 thread syncronize olarak( sleep edip uyandırarak ) repaint() i çağırsa bir sorun çıkar mı emin olamadım.

    Cocurrent olacaksa islem sorun olmaz, API ye bakmak lazim repaint() thread safe olmayabilir.
    Ama soyle bir hata var senin bahsettigin gibi yapmakta, araba neden repaint() i cagirsin ? Arabanin isi olmamali o.
    Baska bir sey arabayi move() ettirmeli, tum arabalar move() ettikten sonra repaint() cagrilmali.
    Bir de tum arabalar ayni anda durup, ayni anda mi hareket edecekler ? Yoksa her arabanin kendi icinde bir timer i mi olacak ?
    Eger ayni anda hareket edeceklerse, yine her arabanin icerisine Thread.sleep() ya da Thread.wait() yapmak gereksiz oluyor.

    < Bu ileti tablet sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: Mephalay


    quote:

    Orijinalden alıntı: Entropii


    quote:

    Orijinalden alıntı: Mephalay

    Ben acikcasi sorunu anlayamadim. Nasil thread ile araba olusturacagini mi soruyorsun, yoksa thread ile tek arabayi kontrol etmem mantikli mi diye mi soruyorsun ?
    Eger ekranda hareket eden cok obje yoksa her biri icin thread acman cok yanlis olmaz. Ama bu isin bestpractise i su, "Movement" 'tan sorumlu bir thread, tum "Moveable" olan objectlerin listesini tutup ( Observer pattern kullanabilirsin ) her frame oncesinde bu listedeki elemanlarin bir sonraki konumunu hesaplayip cizdirir. Boylece istedigin kadar object ekleyebilirsin ve hareketler daha smooth olur. Su haliyle gereksiz CPU cycle tuketecek. Gerci cogunlugu Thread.sleep ile gececegi icin bunu optimize eder isletim sistemi ama normalde oyunlardaki hareket eden onlarca obje bu mantikla cizdiriliyor.

    Cevabınız için teşekkür ederim faydası oldu.
    Sorum şuydu yol üzerinde arabaların gui de ilerlemesi lazım 3 yol var 3 araba olsun elimizde her biri 0.5 sn uyuyup sonra ilerleyecek. Arabaları küçük çizgiler olarak oluşturdum.
    Gui için ise applet lere göz attım, appleti fonksiyon içinde arabalara parametre olarak gönderip, arabanın hızına göre position ını arttırıp tekrar o applettin repaint() ini çağırmayı düşünüyorum.
    Fakat 10 thread syncronize olarak( sleep edip uyandırarak ) repaint() i çağırsa bir sorun çıkar mı emin olamadım.

    Cocurrent olacaksa islem sorun olmaz, API ye bakmak lazim repaint() thread safe olmayabilir.
    Ama soyle bir hata var senin bahsettigin gibi yapmakta, araba neden repaint() i cagirsin ? Arabanin isi olmamali o.
    Baska bir sey arabayi move() ettirmeli, tum arabalar move() ettikten sonra repaint() cagrilmali.
    Bir de tum arabalar ayni anda durup, ayni anda mi hareket edecekler ? Yoksa her arabanin kendi icinde bir timer i mi olacak ?
    Eger ayni anda hareket edeceklerse, yine her arabanin icerisine Thread.sleep() ya da Thread.wait() yapmak gereksiz oluyor.

    Problem şöyle yolun sonunda bir ışık olucak yeşil ya da kırmızı ona göre o yolun threadleri tamamen durup bekleyecek öbür yolun ki devam edecek. Evet sanırım dediğiniz gibi repaint tek kez çağrılmalı fakat her araba bir thread olmalı proje de istenen özellik thread synchronization olduğu için her arabayı bir thread yapmamız istendi.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: Entropii


    quote:

    Orijinalden alıntı: Mephalay


    quote:

    Orijinalden alıntı: Entropii


    quote:

    Orijinalden alıntı: Mephalay

    Ben acikcasi sorunu anlayamadim. Nasil thread ile araba olusturacagini mi soruyorsun, yoksa thread ile tek arabayi kontrol etmem mantikli mi diye mi soruyorsun ?
    Eger ekranda hareket eden cok obje yoksa her biri icin thread acman cok yanlis olmaz. Ama bu isin bestpractise i su, "Movement" 'tan sorumlu bir thread, tum "Moveable" olan objectlerin listesini tutup ( Observer pattern kullanabilirsin ) her frame oncesinde bu listedeki elemanlarin bir sonraki konumunu hesaplayip cizdirir. Boylece istedigin kadar object ekleyebilirsin ve hareketler daha smooth olur. Su haliyle gereksiz CPU cycle tuketecek. Gerci cogunlugu Thread.sleep ile gececegi icin bunu optimize eder isletim sistemi ama normalde oyunlardaki hareket eden onlarca obje bu mantikla cizdiriliyor.

    Cevabınız için teşekkür ederim faydası oldu.
    Sorum şuydu yol üzerinde arabaların gui de ilerlemesi lazım 3 yol var 3 araba olsun elimizde her biri 0.5 sn uyuyup sonra ilerleyecek. Arabaları küçük çizgiler olarak oluşturdum.
    Gui için ise applet lere göz attım, appleti fonksiyon içinde arabalara parametre olarak gönderip, arabanın hızına göre position ını arttırıp tekrar o applettin repaint() ini çağırmayı düşünüyorum.
    Fakat 10 thread syncronize olarak( sleep edip uyandırarak ) repaint() i çağırsa bir sorun çıkar mı emin olamadım.

    Cocurrent olacaksa islem sorun olmaz, API ye bakmak lazim repaint() thread safe olmayabilir.
    Ama soyle bir hata var senin bahsettigin gibi yapmakta, araba neden repaint() i cagirsin ? Arabanin isi olmamali o.
    Baska bir sey arabayi move() ettirmeli, tum arabalar move() ettikten sonra repaint() cagrilmali.
    Bir de tum arabalar ayni anda durup, ayni anda mi hareket edecekler ? Yoksa her arabanin kendi icinde bir timer i mi olacak ?
    Eger ayni anda hareket edeceklerse, yine her arabanin icerisine Thread.sleep() ya da Thread.wait() yapmak gereksiz oluyor.

    Problem şöyle yolun sonunda bir ışık olucak yeşil ya da kırmızı ona göre o yolun threadleri tamamen durup bekleyecek öbür yolun ki devam edecek. Evet sanırım dediğiniz gibi repaint tek kez çağrılmalı fakat her araba bir thread olmalı proje de istenen özellik thread synchronization olduğu için her arabayı bir thread yapmamız istendi.

    Anladim, o zaman her araba kendi thread managementini yapacak.
    Java nin Condition ve Lock interface lerini kullanabilirsin.

    < Bu ileti tablet sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: Mephalay


    quote:

    Orijinalden alıntı: Entropii


    quote:

    Orijinalden alıntı: Mephalay


    quote:

    Orijinalden alıntı: Entropii


    quote:

    Orijinalden alıntı: Mephalay

    Ben acikcasi sorunu anlayamadim. Nasil thread ile araba olusturacagini mi soruyorsun, yoksa thread ile tek arabayi kontrol etmem mantikli mi diye mi soruyorsun ?
    Eger ekranda hareket eden cok obje yoksa her biri icin thread acman cok yanlis olmaz. Ama bu isin bestpractise i su, "Movement" 'tan sorumlu bir thread, tum "Moveable" olan objectlerin listesini tutup ( Observer pattern kullanabilirsin ) her frame oncesinde bu listedeki elemanlarin bir sonraki konumunu hesaplayip cizdirir. Boylece istedigin kadar object ekleyebilirsin ve hareketler daha smooth olur. Su haliyle gereksiz CPU cycle tuketecek. Gerci cogunlugu Thread.sleep ile gececegi icin bunu optimize eder isletim sistemi ama normalde oyunlardaki hareket eden onlarca obje bu mantikla cizdiriliyor.

    Cevabınız için teşekkür ederim faydası oldu.
    Sorum şuydu yol üzerinde arabaların gui de ilerlemesi lazım 3 yol var 3 araba olsun elimizde her biri 0.5 sn uyuyup sonra ilerleyecek. Arabaları küçük çizgiler olarak oluşturdum.
    Gui için ise applet lere göz attım, appleti fonksiyon içinde arabalara parametre olarak gönderip, arabanın hızına göre position ını arttırıp tekrar o applettin repaint() ini çağırmayı düşünüyorum.
    Fakat 10 thread syncronize olarak( sleep edip uyandırarak ) repaint() i çağırsa bir sorun çıkar mı emin olamadım.

    Cocurrent olacaksa islem sorun olmaz, API ye bakmak lazim repaint() thread safe olmayabilir.
    Ama soyle bir hata var senin bahsettigin gibi yapmakta, araba neden repaint() i cagirsin ? Arabanin isi olmamali o.
    Baska bir sey arabayi move() ettirmeli, tum arabalar move() ettikten sonra repaint() cagrilmali.
    Bir de tum arabalar ayni anda durup, ayni anda mi hareket edecekler ? Yoksa her arabanin kendi icinde bir timer i mi olacak ?
    Eger ayni anda hareket edeceklerse, yine her arabanin icerisine Thread.sleep() ya da Thread.wait() yapmak gereksiz oluyor.

    Problem şöyle yolun sonunda bir ışık olucak yeşil ya da kırmızı ona göre o yolun threadleri tamamen durup bekleyecek öbür yolun ki devam edecek. Evet sanırım dediğiniz gibi repaint tek kez çağrılmalı fakat her araba bir thread olmalı proje de istenen özellik thread synchronization olduğu için her arabayı bir thread yapmamız istendi.

    Anladim, o zaman her araba kendi thread managementini yapacak.
    Java nin Condition ve Lock interface lerini kullanabilirsin.

    Anladım dediğiniz özellikleri inceleyeceğim teşekkür ederim yardımcı olduğunuz için.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • Merhabalar,

    Konuyu pek okumadım fakat az çok içeriği tahmin edebiliyorum. Birkaç tavsiyem var;

    -Thread kullanarak oyun yapmak istiyorsanız tamamen thread-safe bir kod yazmanız gerekiyor. Oyun motorları bunları arkada otomatik yapdığından dolayı thread-safe kod yazmana PEK gerek kalmıyor. (Özel durumlar hariç)

    -2 Saniye durdurmak demişssin fakat thread uyutmak çok çok saçma bir iş. Bunun için önce nano-saniye cinsinden 60 ticks, 60 fps üreten bir thread-void yazmalısın. Artık bunu kullanarak 2 saniye mi beklersin, frame'in çizilmesini mi beklersin sana kalan birşey.

    -Resim aktarmak için BufferedImage kullanarak pixel seviyesinde parçalayan bir class oluşturman uygulamanın performansını katlayacaktır. Fakat kaliteli grafik istiyorsan lwjgl gibi veya buna benzer bir kütüphane kullanarak da yapabilirsin. VBO vertex ile FXAA 'da yapabilirsin.

    -Her sınıf veya obje için ayrı bir thread açıp, heleki o thread'ı sürekli sleep ile uyutmak bir yazılım hatasıdır. Hatta derleyiciye küfür etmek gibi birşeydir. Bu yüzden thread ile FPS oluşturan ve bütün olaylar update() fonksiyonu ile güncellemesi gerekir. Ayrıca her FPS 'de o thread'ı birkaç ms sleep ederek uyutmak ekstran'dan performansı arttırıyor. CPU relax 'da diyebiliriz. Yani günlük yaşamdan örnek vermek gerekirse, birkaç saat şekerleme gibi düşün, CPU'ya göre 1ms belki gerçek hayata göre örnek olarak belki de birkaç saat. while döngüsü içinde en azından sleep(2) en fazla (3) yapmak iyi bir seçimdir.

    Bildiğim ekstradan önemli birşey yok. Verdiğim şeyler en önemli olanları. Bunları eskiden kullanıyordum öylesine aklımda kalanlar bunlar. Belki bunlar için framework'ler yapılmıştır araştırmak lazım.

    Kolay gelsin (:




  • quote:

    Orijinalden alıntı: Dentrax

    Merhabalar,

    Konuyu pek okumadım fakat az çok içeriği tahmin edebiliyorum. Birkaç tavsiyem var;

    -Thread kullanarak oyun yapmak istiyorsanız tamamen thread-safe bir kod yazmanız gerekiyor. Oyun motorları bunları arkada otomatik yapdığından dolayı thread-safe kod yazmana PEK gerek kalmıyor. (Özel durumlar hariç)

    -2 Saniye durdurmak demişssin fakat thread uyutmak çok çok saçma bir iş. Bunun için önce nano-saniye cinsinden 60 ticks, 60 fps üreten bir thread-void yazmalısın. Artık bunu kullanarak 2 saniye mi beklersin, frame'in çizilmesini mi beklersin sana kalan birşey.

    -Resim aktarmak için BufferedImage kullanarak pixel seviyesinde parçalayan bir class oluşturman uygulamanın performansını katlayacaktır. Fakat kaliteli grafik istiyorsan lwjgl gibi veya buna benzer bir kütüphane kullanarak da yapabilirsin. VBO vertex ile FXAA 'da yapabilirsin.

    -Her sınıf veya obje için ayrı bir thread açıp, heleki o thread'ı sürekli sleep ile uyutmak bir yazılım hatasıdır. Hatta derleyiciye küfür etmek gibi birşeydir. Bu yüzden thread ile FPS oluşturan ve bütün olaylar update() fonksiyonu ile güncellemesi gerekir. Ayrıca her FPS 'de o thread'ı birkaç ms sleep ederek uyutmak ekstran'dan performansı arttırıyor. CPU relax 'da diyebiliriz. Yani günlük yaşamdan örnek vermek gerekirse, birkaç saat şekerleme gibi düşün, CPU'ya göre 1ms belki gerçek hayata göre örnek olarak belki de birkaç saat. while döngüsü içinde en azından sleep(2) en fazla (3) yapmak iyi bir seçimdir.

    Bildiğim ekstradan önemli birşey yok. Verdiğim şeyler en önemli olanları. Bunları eskiden kullanıyordum öylesine aklımda kalanlar bunlar. Belki bunlar için framework'ler yapılmıştır araştırmak lazım.

    Kolay gelsin (:



    Teşekkür ederim bilgilendirici cevabınız için.

    Amacım oyun yapmak değil o yüzden grafikle işim yok araba şöyle bir çizgi olsa bile yetiyor(--):)
    Performans açısından beklentim aslında yok sadece açtığım zaman çizgiler ilerleyebilirse takılmadan benim için yeterli yani yaptığımı gösterebilsem yetiyor bu durumda da sleepten uzak durmam gerekir mi?




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.