1. sayfa
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. |
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? |
1. sayfa
Ö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.
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 ?
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.