[Çözüldü] Program sonsuz döngüye giriyor.

Başlatan cndg, 10 Mart 2016 - 08:22:55

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

cndg

Java ile çok basit bir oyun yazıyorum. Oyunun bir yerinde enter tuşu bırakılana kadar döngüye girmem gerekiyor yoksa oyunda menüler arasında gezerken sıkıntı oluyor.
Libgdx kullandığım için sorunu bu şekilde çözebileceğimi düşünmüştüm

while(Gdx.input.isKeyPressed(Input.Keys.Enter)){
}

Fakat sonsuz döngüye girdi. Bende boolean değişkenleri pek kullanmadığım için bir şeyleri düşünememiş olabilirim diye

int a = 0;
while(a == 0){
a = 1;
if(Gdx.input.isKeyPressed(Input.Keys.Enter)){
a = 0;
}
}

Şeklinde bir döngü hazırladım fakat yine sonsuz döngüye girdi.
Sorun ne olabilir veya menüler arasında gezinirken bir entera basışın bir kere okunmasını nasıl sağlayabilirim?
İlgilenen herkese teşekkürler.

serdarkokcu

while (True) {
if(Gdx.input.isKeyPressed(Input.Keys.Enter)) {
break;
} }
denesek birde _?

ahmet_matematikci

 Sonsuz  döngüye girmesi normal.
a = 0 diyorsun sonra da while(a==0 ) ise sonsuza kadar çalıştır diyorsun :D
Doğal olarak sonsuza kadar çalışıyor. ;)
♥ Kız tavlamak için kahraman olmak gerekmez. Doğru kadın zaten sizi kahraman yapar ;)

betseg

@ahmet_matematikci, kodda enter'a basılırsa a=0 yapılıyor :)

cndg

@serdarokcu eğer entera basılırsa döngüden çıkarsa zaten olay amacına ulaşmaz ki.
Şuan kodların bulunduğu bilgisayara ulaşamam ulaştığım zaman

while(true){
if(Gdx.input.isKeyPressed(Input.Keys.Enter)){
}
else{
break;
}
}

Deneyeceğim ama pek ümitli değilim çünkü sorunun kaynağını çözemedim.
Mobilden yazıyorum kodlar biçimsiz oldu.

ahmet_matematikci

Alıntı yapılan: betseg - 10 Mart 2016 - 09:21:38
@ahmet_matematikci, kodda enter'a basılırsa a=0 yapılıyor :)
anlamadım.
♥ Kız tavlamak için kahraman olmak gerekmez. Doğru kadın zaten sizi kahraman yapar ;)

barış

while var break yok. Nerede bitirecek? :D
a değişkenini 0'a eşitlemişsin, a değişkenini değeri 0 olduğu sürece bu bu işlemleri yap demişsin.
E sen enter tuşuna 1 kere bastığında 0 oluyor a'nın değeri. Bilgisayara başka bir değer söylemiyorsun sonrasında. boolean değişken tiplerini kullanmayı sevmiyorsan, signed-unsigned ile bir çözüm üretebilirsin. x>0
0>x
gibi bir şey de yapabilirsin.
While döngüsüne sokup a=1 demişsin ama o döngüyü tamamlayana kadar o döngüden çıkmayacak.

Önerilerim:
Bool değişkenler kullanmaya alış,
Try-Catch yapısına bak,
Döngülerin nasıl kurulduğunu değil, nasıl çalıştıklarını öğren.

Erdem

Buradaki cevaba göre Gdx.input.justTouched() kullanmayı tavsiye etmişler.

Ya da iki tane boolean değişken kullanmışlar.

if (Gdx.input.isKeyPressed(Input.Keys.Enter)) {
    if (pauseHelper) {
        if (isPaused) {
            Util.toConsole ("Çalışıyor");
            isPaused = false;
        }
        else {
            Util.toConsole ("Durdu");
            isPaused = true;
        }
        pauseHelper = false;
    }
}
else {
    pauseHelper = true;
}



Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik

cndg

İlgilenen herkese çok teşekkürler @Erdem sana ayrıca da teşekkürler verdiğin bağlantıdan faydalanarak sorunu şu şekilde çözdüm.

//Member variable:
boolean mAKeyWasPressed = false;

//In method:
boolean aKeyIsPressed = Gdx.input.isKeyPressed(Keys.A);
if (aKeyIsPressed && !mAKeyWasPressed){
    //Just pressed. Do stuff here.
}
mAKeyWasPressed = aKeyIsPressed;

Reverser


XFCE ROCKS !
Powered by Thunar & XFWM4