2012-05-29 7 views
7

Ich habe ein Spiel (wie Super Jumper, dieses Spiel ist ein Jumping-Spiel), dass unser Charakter das Leben hat. Nach der Kollision mit Feinden verringert sich sein Leben. und ich will nach 1 sek die kollisionen berechnen. Ich meine in dieser 1 Sekunde, wenn mein Charakter Kontakt mit Feinden hat, passiert nichts und er setzt seinen Weg fort. hierfür definiere ich eine boolesche Variable in meiner GameScreen-Klasse namens "collision" und eine andere in der Wolrd-Klasse, nenne "collBirds". nach einem Kontakt mit feindlichen Kollision und collBirds ändern sich zu wahr. aber ich will nach 1 sek kollision wechseln zu false. Ich benutze verschiedene Dinge wie System.currentTimeMillis() und "for loop", und nichts passiert. Ich bin nicht so gut in Java.eine Verzögerung in libgdx Spiel

dies ist meine Bedingung:

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

Check out [diese Frage] (http://gamedev.stackexchange.com/questions/25001/waiting-specific-time-to-increase-sound-libgdx) –

+0

tnx für Ihre Antwort. Ich lese es und benutze es. aber ich ändere etwas in meinem Spiel und schließlich hat es funktioniert. – Hosein

Antwort

0

Wenn Sie diese in demselben Thread tun wollen, als Sie Thread.sleep verwenden können(). Aber in diesem Fall wird dein aktueller Thread einfrieren und wenn dies ein Single-Thread-Spiel ist, wird dein ganzes Spiel eingefroren. Wenn Sie Ihr Spiel nicht 1 Sekunde lang einzufrieren, als Sie den Thread erzeugen sollte und in diesem Thread den Schlaf nennen und nach dem Schlaf, die Flagge ändern

6

Wenn die erste Kollision auftritt, stellen Sie einen float timeSinceCollision = 0;

Dann müssen Sie für jede Schleife die Zeit seit der letzten Überprüfung der Variablen hinzufügen und prüfen, ob sie länger als eine Sekunde ist.

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

es funktioniert nur zum ersten Mal, nach der Kollision einen Punkt aus dem Leben zu reduzieren, aber für andere Zeiten, nichts passieren ... – Hosein

+3

eh, reset timeSinceCollision in // tun Kollision Stuff Branch? – Ludevik

32

In einigen Fällen können Sie auch com.badlogic.gdx.utils.Timer

Beispiel Verwendung verwenden könnten wollen:

float delay = 1; // seconds 

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