[Çö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

Kodları aslında birebir kopyalamadım.Yani sadece nasıl yaptığına baktım.Yoksa kopyala yapıştır yaptıktan sonra bir anlamı olmuyor zaten.Arada da çok farklılıklar var.Zaten bu yüzden hata yaptığımı düşünüyorum.Kopya çektiğim dediğim oyun hatasız, hatta yanlış hatırlamıyorsam tüm java sürümlerinde de çalışmıştı.

Oyunu tekrardan yazmayı planlıyorum.Bir şeyler değişir mi bilmiyorum fakat başka da bir çare yok gibi.Sonuç olarak durum ne olursa olsun çok saçma geliyor bana.Sizlerde takılma olmuyorken ben de olması çok can sıkıcı.

Alıntı YapÇoklu platform için uygulama geliştiriyorsan mümkün olduğunca taşınabilir yöntemleri tercih edeceksin, şüpheli durumlardan uzak duracaksın. "Denedim çalışıyor işte salla gitsin" dersen böyle durumların çıkması olası.

O sıralar sadece oyunun mantığını anlamaya çalıştığım için uyumluluk sorunlarını hiç düşünmemiştim.Amacım öğrenmekti sadece.

ekremsenturk

Başkasında sorun yaşanmıyorsa, senin Ubuntu'nun yapılandırılmasında da bir fark olabilir. Veya ekran kartı sürücüsü ile ilgili olabilir. Kesilmelerin nedeni (Geleneksel Basic'te) grafik kartın zorlanmasından kaynaklanır. Sorunun çözümü olarak, 1. grafiklerin boyutunu küçültebilirsin. 2. işlemler arası milisaniye'lik bekletmeler ekleyebilirsin. 3. ekran yenileme hızı ile oyunun yenileme hızı örtüşmüyor olabilir. 4. (Benzer bir durum) Ekran ayarları Ubuntu'da doğru seçilmemiş olabilir.

blacksnow

Kesilmelerin nedeninin grafik kartının zorlanmasından olduğunu düşünmüyorum.Çünkü takılmalar periyodik bir şekilde oluyor.Tabi emin değilim, dediğiniz doğru olabilir.

Grafiklerin boyutunu küçültmeyi denedim bir şey değişmedi.2. ve 3. önerdiğiniz yöntemi tam olarak anlamadım.Oyun, her 20 ms de bir ekran yeniliyor ve belirlenen hıza göre saniyede 9 kare hız ile(yaklaşık 111 ms) oyun yenileniyor.

Son olarak Ubuntu da ne tür ekran ayarları yapılır bilmiyorum.Daha fazla detay verebilirseniz deneyebilirim.

Amenofis

Herhangi bir oyun oynayabiliyorsan grafik ayarlarında sorun yok demektir. Zaten bu oyunda grafik namına bişey yok ki neden zorlansın. Yerinde olsam baştan satır satır kendim yazardım. Eminim jdk-8 de bile sorunsuz olarak çalışacaktır.

Birde bişey sormak istiyorum. Yılanın engele çarpması nasıl yapılmış oyunun orjinalinde? Arka planda dizi mi kullanmış yoksa piksel kontrolü mü yapmış?

blacksnow

Alıntı YapHerhangi bir oyun oynayabiliyorsan grafik ayarlarında sorun yok demektir. Zaten bu oyunda grafik namına bişey yok ki neden zorlansın. Yerinde olsam baştan satır satır kendim yazardım. Eminim jdk-8 de bile sorunsuz olarak çalışacaktır.

Bu konuda aynı fikirdeyim.Grafik kartlarında bir sorun olduğunu düşünmüyorum.Zaten bumblebee ile nvidia ekran kartı ile de denedim aynı takılmalar mevcut yine.

Alıntı YapBirde bişey sormak istiyorum. Yılanın engele çarpması nasıl yapılmış oyunun orjinalinde? Arka planda dizi mi kullanmış yoksa piksel kontrolü mü yapmış?
Oyunun orjinalinde böyle bir şey yoktu.Nasıl olduğunu sorarsanız her bir duvar bir pikseli temsil ediyor.Arka planda dizi kullanarak nasıl olur bilmiyorum.Aklıma bu gelmişti.
Orjinal oyunun kaynak kodlarını veriyorum aşağıda.Arada ki farklara bakabilirsiniz.
https://github.com/PSNB92/SnakeRemake/tree/master/src/org/psnbtech

Hatta hatırlarsanız şöyle bir konu açmıştım: https://forum.ubuntu-tr.net/index.php?topic=45981.0
O zamanlar openjdk-7 ile düzelmişti takılma sorunum.
Ayrıca orada verdiğiniz fikirlerle yeni bir clock sınıfı yazmıştım.Orjinal oyundakine benziyordu fakat biraz daha sadeydi.

blacksnow

Tekrardan merhaba, oyunu tekrardan çok basit düzeyde yeniden yazdım.Aslında oyun bile denemez, tek bir kare var.Deneme amaçlı olduğunda basit tutmak istedim.Sonuç olarak takılmalar hala var.

Oyunu yine paylaşıyorum.Kodlar çok sade okunabilir.Hata olduğunu düşünmüyorum fakat eğer varsa bulmama yardım edebilir misiniz?
http://dosya.co/qg6k9a8zyplb/SnakeProject.rar.html

Bence sorun benim bilgisayarımda fakat nasıl bir sorun hiçbir fikrim yok.

Reverser


public void start() {

while(true) {

// Yılanın gideceği yeni yön belirleniyor.
nextPoint(head);

// Yeniden çizim yaptırılıyor.
board.repaint();

// Yılan bekletiliyor.
try {
Thread.sleep(1000/9);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


Thread.sleep(1000/9); ile azıcık oynayın bakalım değişen bir şey olacak mı ? Bu arada sorun sizin bilgisayarınızla ilgili falan değil aynı sorun bende de oldu yukarıda belirtmiştim.

XFCE ROCKS !
Powered by Thunar & XFWM4



blacksnow

#32
Yanlış hatırlamıyorsam siz oracle java 8 ile denemiştiniz.Openjdk 7 ve java 8 ' de olan takılmalar farklı.Sonuçta hepsi aynı sorundan dolayı mı oluyor tabi bilmiyorum.

Bahsettiğiniz değerle oynamaktan bahsedersek, bunu daha öncede anlattım.Eğer saniyede 9 karenin altına inerse örneğin 1000/8 gibi takılmalar ya olmuyor yada oluyor fakat farkedilmiyor.
Eğer saniyede 10 kare yaparsam takılmalar yine gözükmüyor.Eğer 10'un üstünde olursa bu sefer yılan 2 kare birden atlıyormuş gibi görünüyor.

Aşağıdaki oyunu eğer deneme fırsatınız olursa takılma olmadığını görebilirsiniz.Bu oyun içinde yukarıdaki kare saniye durumlarını denedim ve hiç takılmıyor.Bana kalırsa sorun o bahsettiğiniz kodla ilgili değil çünkü ben aşağıdaki oyunun ana döngüsünün yaklaşık olarak birebir aynısını denedim ve yine takılma oldu.
https://github.com/PSNB92/SnakeRemake/tree/master/src/org/psnbtech

*bağlantıda verdiğim oyunda bu sorunun çözümü bulunmakta fakat nerede bilmiyorum.Geniş bir zamanda didik didik edip bulmaya çalışacağım.

Düzenleme: Bağlantıda verdiğim oyunda arka plan siyah değil, çizgiler çizilmiş(yılanın yollarını göstermek için) ve eğer o çizgileri kaldırırsam o oyunda da takılmalar oluyor.O zaman kendi oyunuma çizgi eklersem düzelebilir dedim.Ama yine takılma oldu.Ben bu kadar saçma durumları hayatımda ilk kez görüyorum.Artık gözlerimde sorun olduğunu düşünmeye bile başladım.

blacksnow

#33
Sorunu hala çözemedim.Oyunu çok basit düzeyde yazsam da, grafik olarak neredeyse hiçbir şey olmasa da takılmalar hala var.

Eğer Java'da içsel bir hata var ise ve bu hata bazı makinelerde gözüküp bazılarında gözükmüyorsa, bu tür bir hatayı nasıl düzeltebilirim?
Bug raporu hazırlamak istiyorum fakat nasıl hazırlanır bilmiyorum.Eğer yardım ederseniz bir bug raporu hazırlamak istiyorum.

Başka ne yapabilirim bilmiyorum.Java ile uygulama geliştirmek için Windows kullanmak istemiyorum, zaten Ubuntu'ya da çok alıştım.

Amenofis

Java ile büyük programları çalıştırabiliyormusun? Denemediysen eclipse çalıştırmayı dene. Hatta yapabilirsen minecraft kur.
Olmuyorsa live cd/usb ile başka bir linux dağıtımında aynı şeyi dene. Tabi içinde java yüklü olması lazım.

Normalde java ile linuxun herhangi bir anlaşmazlığı yoktur. Ben şimdiye kadar java 6-7 ile hiçbir sorun görmedim.

blacksnow

Şuan zaten Eclipse kullanıyorum.Herhangi bir sorun görmedim.Minecraft denemedim.
Ubuntu dan başka dağıtım kullanmadığım için diğer dağıtımlarda java nasıl yüklenir bilmiyorum.Eğer aynıysa deneyebilirim.

blackwidow

Alıntı yapılan: blacksnow - 23 Nisan 2015 - 10:59:01
Şuan zaten Eclipse kullanıyorum.Herhangi bir sorun görmedim.Minecraft denemedim.
Ubuntu dan başka dağıtım kullanmadığım için diğer dağıtımlarda java nasıl yüklenir bilmiyorum.Eğer aynıysa deneyebilirim.

bence salla gitsin

değmez bu kadar uğraşmaya

blacksnow

@blackwidow, ne yapmamı öneriyorsunuz? Bırakayım mı yani öylece? Hem ileride farklı bir oyun yapmaya çalışsam yine bu tarz takılmalar alacağıma eminim.Önerdiğiniz şey Windows ile mi işlerimi halletmek?

Amenofis

Benim önerim java ile normal uygulamalar yazın, oyun değil. Java oyunlar için tavsiye edilen bir platform değildir.

Eğer ille de java yazacağım diyorsanız oyun/multimedia için özel tasarlanmış bir kütüphane kullanın. En iyisi libgdx tir, çizimler vs. için C/opengl kullanır. http://libgdx.badlogicgames.com/


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 23 Nisan 2015 - 14:00:32

Unutmuşum birde şu salla gitsin diyenleri sakın takmayın. Programcılık zaten baştan sona sorun yumağı bir iştir. Bu kadar basit şeylerde pes ederseniz bu işi komple bırakmanız gerekir.

blacksnow

Alıntı YapUnutmuşum birde şu salla gitsin diyenleri sakın takmayın. Programcılık zaten baştan sona sorun yumağı bir iştir. Bu kadar basit şeylerde pes ederseniz bu işi komple bırakmanız gerekir.
Kesinlikle katılıyorum hocam.Hemen vazgeçecek olsak bu işe hiç başlamazdık.

Alıntı YapBenim önerim java ile normal uygulamalar yazın, oyun değil. Java oyunlar için tavsiye edilen bir platform değildir.

Eğer ille de java yazacağım diyorsanız oyun/multimedia için özel tasarlanmış bir kütüphane kullanın. En iyisi libgdx tir, çizimler vs. için C/opengl kullanır. http://libgdx.badlogicgames.com/
Eğer sorunu çözebilecek bilgi seviyem olsa bu işin peşini bırakmazdım fakat şu noktada yapabileceğim pek de bir şey kalmadı.Libgdx kütüphanesi deneyeceğim, bakalım sonuçları ne olacak.

Son olarak şunu da söyleyeyim, Linux Mint 17.1 ile de denedim oyunu yine takılmalar var.

heartsmagic

Bazen daha çok insana ulaşabileceğin yerlerden yardım istemek daha makuldür :)

Bu forumun programlama yönüne bayılıyorum kendi adıma, kaldı ki programlama forumu bile değiliz. Fakat, ben bayılsam bile sayınız cidden fazla değil. Bu nedenle daha fazla gözün bakabileceği yerlerde deneyebilirsin şansını. Örneğin Stackexchange'in programlama bölümü gibi. Sorunu sorar, kodunu paylaşır, java etiketini koyarsın. Muhtemelen güzel fikirler gelecektir. Soru sorma sebebini de çok uzatmadan, bu işi öğrenmek isteği olarak açıklarsın.

Tabi soru içinde platformun Linux olduğu, türlü türlü Java sürümleri ile denendiği açıklanmalı. Kod olarak şu son zamanlarda paylaştığın en basit kodu paylaşırsan bence daha güzel olur.
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

#41
Bunları tam olarak anlatabilecek İngilizce seviyem olduğuna emin değilim.En azından deneyeyim.Teşekkürler fikriniz için.

Düzenleme: Daha sorunun başlığını yazarken takıldım."Snake Game Lag Problem in Java on Ubuntu", sizce uygun mu?İngilizcem çok iyi değil maalesef.

blackwidow

Alıntı yapılan: blacksnow - 23 Nisan 2015 - 12:50:39
@blackwidow, ne yapmamı öneriyorsunuz? Bırakayım mı yani öylece? Hem ileride farklı bir oyun yapmaya çalışsam yine bu tarz takılmalar alacağıma eminim.Önerdiğiniz şey Windows ile mi işlerimi halletmek?

Hocam biraz irdeledim yazılanları da en basiti Minecraft da bile kurması zulüm neredeyse 10 tane sürümü var
Sıkıntının kodda değilde Java nın karmaşık yapısında olduğunu düşünüyorum.
Eğer yaptığınız kendinizi suçlamaksa yapmayın hani olmuyor bulamadım gibisinden , önerim sıfırdan yazmanız .
Androidin kolay olduğunu duydum emin olun işin içine girince bir de alışınca bu entry'e bakıp nostaljiymiş dersiniz :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 23 Nisan 2015 - 18:17:36

Alıntı yapılan: Amenofis - 23 Nisan 2015 - 13:57:45
Unutmuşum birde şu salla gitsin diyenleri sakın takmayın. Programcılık zaten baştan sona sorun yumağı bir iştir. Bu kadar basit şeylerde pes ederseniz bu işi komple bırakmanız gerekir.

Komikmiş :D


blacksnow

@blackwidow, zaten kodları sıfırdan yazdım.Son verdiğim link, o tek kare var sadece dediğim.

Kendimi suçladığım yok.Benim kafama takılan tek nokta Windows ile çalışıp Ubuntu (ayrıca Linux Mint) ile çalışmaması.Çünkü, ileride Windows' u temelli bırakıp bir Linux dağıtımı ile devam etmek istiyorum fakat böyle sorunlar olduğu sürece bu pek mümkün olmuyor.

heartsmagic

"Lag problem for a simple game in Java on Linux" olabilir ancak konu gövdesini de iyi kotarman lazım. Vakit olduğunda yardım etmeye çalışırız, bir are dürtersin tekrar başlığı.
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

#45
Soruyu tamamladım fakat göndermeden önce bir kontrol etmenizin faydası olabilir.

I am using Ubuntu 14.04 and openjdk-7.I am working with Eclipse.
I made a snake game in java on Ubuntu but there is a lag problem with the game.The lag is happening in openjdk-7 on Ubuntu 14.04 and Linux Mint 17.1.On the other hand, there is no lag in oracle-java-7 on Windows 8.1.Some of my friends tried the game in openjdk-7 on Elementary OS Freya, Manjaro x64, Arm Board and they didn't see any lag.It is just happening to me.
I want to know why this lag is happening?

To find the reason of the lag, I wrote a simple test.
Here are the classes:

Buraya üç sınıfı kod etiketleri için de yazacağım.

if

Sorunun olmadığı diğer dağıtımlar ve java sürümlerini de verin.

blacksnow

#47
Sorunun olmadığı dağıtımları ekledim.Java sürümleri aynıydı zaten değiştirmedim.Anlaşılır mı sizce?

Soruyu gönderdim, hatalı bir yer yada eklemem gereken bir şey varsa söylemeniz yeterli.
http://programmers.stackexchange.com/questions/280144/lag-problem-for-a-simple-game-in-java-on-linux

Soruyu tam anlamadıklarını söylüyorlar.Daha fazla nasıl detay verebilirim?Aslında herşeyi yazdım.

Amenofis

Soruyu daraltsan daha iyi olurdu. Oyundaki sorunlu tek metod JPanel.repaint(). Metodun zamanında tetiklendiği kesin ama arka planda gecikme sorunu var.

heartsmagic

Olması gerekeni ve olanı görmedikleri veya anlamadıkları için söylüyorlar bunu. Tam olarak nasıl anlatırsın düşünmek lazım.

"The snake (in the example code a small square) is supposed to move square by square at a time. This is working without any problem on some systems (say Windows 7 and some Linux distros). But for me after a specific time or move a "lag" occurs."

gibi bir şey eklenebilir ancak bu da yeterli olur mu bilemiyorum. @Amenofis'in dediğinden yola çıkarsan başka şeyler yazmak gerekecek ancak programlama yönüm olmadığı için neyi nasıl anlatırız bilemiyorum.
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.