[Çözüldü] Yılan Oyununda Takılma Sorunu

Başlatan blacksnow, 13 Nisan 2015 - 20:16:01

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

blacksnow

Sanırım konuyu çok fazla dağıttım.Aslında sorun sadece şu, benim bilgisayarımda herhangi bir linux dağıtımı ve openjdk-7 ile takılma oluyor.Fakat başka bir bilgisayarda aynı durumda takılma olmuyor.Yukarıda "herhangi bir linux dağıtımı" dedim fakat bu sadece bir tahmin.Ben sadece Ubuntu ve Linux Mint ile denedim.Yani aslında burda odaklanılması gereken nokta dağıtımlar değil.

Bugün tekrardan bir düzenleme yaparım fakat sorunun böyle soru cevap şeklinde çözülebilecek bir şey olduğunu düşünmüyorum.Söylediğim gibi bence bu sorun benim bilgisayarıma özel bir sorun çünkü hiç kimse openjdk-7 ile takılma sorunu yaşamadı ve sadece bende oldu.Hatta eski bilgisayarımda da oyun gayet sağlıklı çalışıyordu yine aynı sistemle.

heartsmagic

Yazmayı unutmuşum ben, aynı sorunu yaşıyorum 1.8 sürümü ile:
java -version                                                                                                                           
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)


Ubuntu 15.04 üzerindeyim. Video kaydını ekliyorum, eğer gördüğüm şey senin bahsettiğin sorun değilse bilemiyorum tabi. Dosyanın uzantısını .mkv yaparsın indirdikten sonra. 36KB bir şey boyutu.


[eklenti yönetici tarafından silindi]
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

blacksnow

Evet aynen söylemeye çalıştığım gibi bu benim bahsettiğim sorun değil.Yani openjdk-7 de ki takılmalar daha farklı.En iyisi ben de bir video koyayım.Hangi programla çektiniz video yu?

heartsmagic

Simplescreenrecorder ile.
https://launchpad.net/~maarten-baert/+archive/ubuntu/simplescreenrecorder

Gerçi uğraşmana değecek mi bilmiyorum. Sorun cidden sendeyse diğer taraftan da cevap alamayabilirsin. Zira sisteme bağımlı bir mesele olur bu. Grafik kartı sürücülerin vs. işin içine de girebilir.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

blacksnow

Video' yu çektim.Bende ki takılmalar sizde ki kadar fazla değil fakat yine de var.Aynen bu şekilde takılmalar alan varsa belki aynı sorunu paylaşıyor olabiliriz.

[eklenti yönetici tarafından silindi]

Amenofis

paintComponent metodunun sonuna Toolkit.getDefaultToolkit().sync(); eklediğim zaman java 8 deki takılmaların çoğu gitti. Yine de az da olsa takılıyor maalesef.

blacksnow

@Amenofis, verdiğiniz kod ne işe yarıyor bilmiyorum fakat bende bir farklılık yaratmadı.

Siz takılmaların sebebinin çizdirilme yapılırken olduğunu düşünüyorsunuz fakat ben çizimlerde geçen süreyi ölçtüğümde 1ms geçmiyor.
Tüm bir döngüde yani çizdirilme, kontrol ve bekleme süresi toplamı 111 ms yani benim bekletme yaptığım süreye (1000/9) eşit.Bu da demek oluyor ki Java'ya göre herhangi bir gecikme yok.O zaman gecikmeye sebep olan işletim sistemi oluyor.

Bunun yanında Windows ile Java 8 ' de sorun çıkmaması ve Linux ' de yine Java 8 ile sorun çıkması.Burada da Java ile işletim sistemi arasında bir sorun olduğu aşikar.

Amenofis

Hayır yanlış hatırlıyorsun ben sadece bu yöntemin hatalı olduğunu söylemiştim. Bende biliyorum 1ms sürdüğünü yoksa cpu %2 de kalırmıydı. Ben hem kendime bişeyler katmak hem de sana yardımcı olmak amacıyla java bilmediğim halde araştırma yapıyorum ama sen böyle saçma şeyler iddia ederek insanı aptal yerine koyuyorsun.

Senin ekrana çizdirdiğini düşündüğün şeyler aslında belleğe yazılıyor, sonra topluca ekrana kopyalanıyor. Bunun sebebi çizdirme yaparken titreşim efektinin önlenmesi. Yazdığın basit kodda dikdörtgen çizdiren fillrect zamanında çalışmasına rağmen ekrana yansımasında sorun var. Bu da apaçık double buffering problemine işaret ediyor. Verdiğim sync metodu arka plandaki framebufferı ekrana senkronize ediyor. Normalde bunun gerekmediğini söylemişler ama bende işe yaradığına göre demekki bazen gerekiyor. zetcode.com' un yılan oyununda da kullanılmış.

Birde ilk mesajında verdiğin oyunda (V2) normalde takılma yapmasına rağmen herhangi bi yön tuşuna basılı tutarsam takılma ortadan kalkıyor. Demekki keyevent olayı bir şekilde buffer'ı tetikliyor. Javanın içsel fonksiyonlarını iyi bilmedikten sonra teşhis koymak zor. Bu da bu konuya son mesajım olsun.

blacksnow

#58
Kusura bakmayın hocam benim Java bilgim o kadar derin değil.Hatta ben neyi araştıracağımı bile bimiyordum.Ben sadece tahmin yürütüyordum.Ben aslında saçma sapan şeyler iddaa ettiğimin de farkında değildim.Keşke daha önce söyleseydiniz de bu duruma gelmeseydi.Ben tüm yardımlarınız için teşekkür ederim.

Ben de denedim ve tuşa basılı tuttuğumda takılma olmuyor.Yukarıda anlattıklarınızı anlayacak kadar bile Java bilgim yok.Anladığım bir şey var o da sorunu bulmuşsunuz.Bunun içinde ayrıca teşekkür ederim.

Ayrıca şunu söylemek isterim, ben kimseyi aptal yerine koymadım.Sadece düşündüklerimi aktarmaya çalıştım.Biraz abartmış olabilirim.Bir şey biliyormuş gibi konuşmuş olabilirim fakat öyle değil.Yanlış yönlendirme yaptığımı düşündüyseniz söylemeniz yeterliydi.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 28 Nisan 2015 - 20:23:49

@Amenofis, verdiğiniz kodu yılan oyununda denediğimde takılmalar gitti.Gerçekten çok teşekkür ederim.

heartsmagic

O halde, @Amenofis'e teşekkür ederek: cozuldukonusu
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.