2012-05-29 37 views
7

tengo un juego (como super jumper, este juego es un juego de saltos) en el que nuestro personaje tiene vida. después de la colisión con los enemigos, su vida se reduce. y quiero después de 1 segundo, calcular las colisiones. quiero decir en este 1 segundo, si mi personaje entra en contacto con los enemigos, no pasa nada y continúa su camino. para esto, defino una variable booleana en mi clase GameScreen, nombre "colisión" y otra en la clase Wolrd, nombre "collBirds". después de un contacto con la colisión enemiga y collBirds cambian a verdadero. pero quiero que después de 1 segundo la colisión cambie a falso. utilizo varias cosas como System.currentTimeMillis() y "for loop", y no pasa nada. No soy tan bueno en Java.establece un retraso en el juego libgdx

este es mi condición:

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

Salida [esta cuestión] (http://gamedev.stackexchange.com/questions/25001/waiting-specific-time-to-increase-sound-libgdx) –

+0

tnx por su respuesta. Lo leí y lo uso. pero cambio algo en mi juego, y finalmente funcionó. – Hosein

Respuesta

0

Si usted quiere hacer esto en mismo hilo de lo que puede utilizar Thread.sleep(). Pero en este caso su hilo actual se congelará y si este es un juego de hilo único, entonces todo su juego se congelará. Si no quiere que su juego de congelar durante 1 segundo, lo que debería generar la rosca y en ese hilo llamar al sueño y después de dormir, cambiar la bandera

6

Cuando se produce la primera colisión, establecer un float timeSinceCollision = 0;

Luego, en cada ciclo, deberá agregar el tiempo transcurrido desde la última verificación a la variable y verificar si es más de un segundo.

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

simplemente funciona por primera vez, después de la colisión se reduce un punto de la vida útil, pero en otras ocasiones, no ocurre nada ... – Hosein

+3

eh, reinicie timeSinceCollision en // ¿colisión de la rama de cosas? – Ludevik

32

En algunos casos también se podría querer usar com.badlogic.gdx.utils.Timer

Ejemplo de uso:

float delay = 1; // seconds 

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