2012-05-29 5 views
7

ho un gioco (come super jumper, questo gioco è un gioco di salto) che il nostro personaggio ha vita. dopo la collisione con i nemici, la sua vita si riduce. e voglio dopo 1 secondo, calcolare le collisioni. Voglio dire in questo 1 sec, se il mio personaggio entra in contatto con i nemici, non succede nulla e lui continua la sua strada. per questo, definisco una variabile booleana nella mia classe GameScreen, nome "collisione" e un altro nella classe Wolrd, nome "collBirds". dopo un contatto con collisione nemica e collBirds diventa true. ma voglio dopo 1 secondo di collistazione cambiare in falso. io uso diverse cose come System.currentTimeMillis() e "for loop", e non succede nulla. non sono così bravo in java.imposta un ritardo nel gioco libgdx

questa è la mia condizione:

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

Partenza [questa domanda] (http://gamedev.stackexchange.com/questions/25001/waiting-specific-time-to-increase-sound-libgdx) –

+0

tnx per la risposta. l'ho letto e lo uso ma ho cambiato qualcosa nel mio gioco, e alla fine ha funzionato. – Hosein

risposta

0

Se si vuole fare questo in stesso thread che è possibile utilizzare Thread.sleep(). Ma in questo caso il thread corrente si bloccherà e se si tratta di un gioco a thread singolo, l'intero gioco si bloccherà. Se non si desidera che il gioco di congelare per 1 secondo, di quanto deve deporre le uova e il filo in filo che chiamare il sonno e dopo il sonno, cambiare la bandiera

6

Quando si verifica la prima collisione, impostare un float timeSinceCollision = 0;

Quindi ogni ciclo, è necessario aggiungere il tempo dall'ultimo controllo alla variabile e controllare se è più di un secondo.

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

funziona solo per la prima volta, dopo la collisione, un punto si riduce dalla vita, ma per altre volte, non succede nulla ... – Hosein

+3

eh, resetta timeSinceCollision in // fai collisione roba del ramo? – Ludevik

32

In alcuni casi si potrebbe anche decidere di utilizzare com.badlogic.gdx.utils.Timer

Esempio di utilizzo:

float delay = 1; // seconds 

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