2012-05-29 24 views
7

bir gecikme ayarlamak bir karakter (süper jumper gibi, bu oyun bir atlama oyunu) karakterimizin hayat vardır. Düşmanlarla çarpıştıktan sonra hayatı azalır. ve 1 saniye sonra istiyorum, çarpışmaları hesapla. Yani bu 1 saniyede, eğer karakterim düşmanlarla temas ederse, hiçbir şey olmaz ve yoluna devam eder. Bunun için , GameScreen sınıfımda bir boole değişkeni, "collision" adı ve Wolrd sınıfında başka bir isim "collBirds" tanımladım. Düşman çarpışma ve collBirds ile bir temas sonra doğruya değişir. ama ben 1 sn sonra değişmek istiyorum. System.currentTimeMillis() ve "for loop" gibi birçok şeyi kullanıyorum ve hiçbir şey olmuyor. java'da pek iyi değilim. Eğer Thread.sleep kullanabilirsiniz yerine) (aynı iş parçacığı bunu yapmak istiyorsanızlibgdx oyun

if(World.collBirds == true && collition == false){ 
     life -= 1; 
     lifeString = "Life : " + life; 
     World.collBirds = false; 
     collition = true; 
     for (??? "need to stay here for 1 sec" ???) { 
      collition = false; 
     } 
    } 
+1

Kontrol dışarı [Bu soru] (http:/Cevabınız için /gamedev.stackexchange.com/questions/25001/waiting-specific-time-to-increase-sound-libgdx) –

+0

tnx. okurum ve kullanıyorum. ama oyunumda bir şey değiştirdim ve sonunda işe yaradı. – Hosein

cevap

0

:

bu

benim durumdur. Ancak bu durumda geçerli parçanız donacaktır ve eğer bu tek iplik oyunu ise, tüm oyununuz donacaktır. Eğer iplik yumurtlamaya ve bu iş parçacığı uyku ve uykudan sonra çağırmalıdır daha 1 saniye dondurmak için oyununuzu istemiyorsanız, bayrak ilk çarpışma meydana

6

değiştirmek, bir float timeSinceCollision = 0;

set

Her döngüde, son kontrolten bu yana değişkene zaman eklemeniz ve bir saniyeden fazla olup olmadığını kontrol etmeniz gerekir. Ayrıca com.badlogic.gdx.utils.Timer kullanmak istediğiniz olabilecek bazı durumlarda

timeSinceCollision += deltaTime; 
if(timeSinceCollision > 1.0f) { 
    // do collision stuff 
} else { 
    // ignore the collision 
} 
+0

Sadece ilk kez çalışıyor, çarpışmadan sonra bir nokta hayattan düşüyor, ama başka zamanlar için hiçbir şey olmuyor ... – Hosein

+3

eh, reset timeSinceCollision in ////// çarpışma işleri dalında? – Ludevik

32

Örnek kullanım:

float delay = 1; // seconds 

Timer.schedule(new Task(){ 
    @Override 
    public void run() { 
     // Do your work 
    } 
}, delay);