2012-09-14 113 views
7

He buscado tantos sitios en Google para intentar hacer que esto funcione pero NADIE parece tener esto en ninguna parte, y si lo hacen, simplemente NO está trabajando con mi programa ... Lo que Lo que intento lograr es que un jugador retroceda cuando el jugador es golpeado, tiene una "x" cantidad de tiempo entre ser golpeado la primera vez y la segunda vez.Crear una cuenta regresiva simple en el procesamiento

Tengo un Boolean "hit" = false y cuando lo golpean, cambia a true. Lo que significa que no puede ser golpeado nuevamente hasta que se cambie a falso nuevamente.

Así que estoy tratando de configurar una función en mi programa para establecer un "temporizador" para "x" cantidad de segundos IF hit = true y una vez que el temporizador llegue a "x" segundos, golpeará volverá a ser falso .

¿Alguien tiene alguna idea?

Gracias!

+0

... ¿Qué idioma? – FrankieTheKneeMan

+0

Estoy usando procesamiento (Java) – D34thSt4lker

Respuesta

14

Una opción simple es hacer un seguimiento del tiempo manualmente usando millis().

Se podría utilizar dos variables:

  1. uno para almacenar el tiempo transcurrido
  2. uno para almacenar el tiempo de espera/retardo que necesita

En el método draw() le comprobar si la diferencia entre el tiempo actual (en milisegundos) y el tiempo previamente almacenado es mayor (o igual) al retardo.

Si es así, esto sería el que eres señal para hacer lo que el retraso dado y actualizar la hora almacenada:

int time; 
int wait = 1000; 

void setup(){ 
    time = millis();//store the current time 
} 
void draw(){ 
    //check the difference between now and the previously stored time is greater than the wait interval 
    if(millis() - time >= wait){ 
    println("tick");//if it is, do something 
    time = millis();//also update the stored time 
    } 
} 

Aquí hay una ligera variación de las actualizaciones de una 'aguja' en la pantalla:

int time; 
int wait = 1000; 

boolean tick; 

void setup(){ 
    time = millis();//store the current time 
    smooth(); 
    strokeWeight(3); 
} 
void draw(){ 
    //check the difference between now and the previously stored time is greater than the wait interval 
    if(millis() - time >= wait){ 
    tick = !tick;//if it is, do something 
    time = millis();//also update the stored time 
    } 
    //draw a visual cue 
    background(255); 
    line(50,10,tick ? 10 : 90,90); 
} 

Dependiendo de su configuración/necesidades, puede elegir envolver algo como esto en una clase que pueda reutilizarse. Este es un enfoque básico y debería funcionar también con las versiones de Android y JavaScript (aunque en javascript tienes setInterval()).

Si le interesa usar las utilidades de Java, como FrankieTheKneeMan sugirió, hay una clase TimerTask disponible y estoy seguro de que hay muchos recursos/ejemplos.

Puede ejecutar una demostración abajo:

var time; 
 
var wait = 1000; 
 

 
var tick = false; 
 

 
function setup(){ 
 
    time = millis();//store the current time 
 
    smooth(); 
 
    strokeWeight(3); 
 
} 
 
function draw(){ 
 
    //check the difference between now and the previously stored time is greater than the wait interval 
 
    if(millis() - time >= wait){ 
 
    tick = !tick;//if it is, do something 
 
    time = millis();//also update the stored time 
 
    } 
 
    //draw a visual cue 
 
    background(255); 
 
    line(50,10,tick ? 10 : 90,90); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.4.4/p5.min.js"></script>

+0

Gracias por esto, de hecho encontré la manera de hacerlo usando la clase ya hecha de otra persona. Gracias por su aporte. Muy apreciado – D34thSt4lker

+0

Sin preocupaciones, me alegro de que haya logrado solucionarlo. –

Cuestiones relacionadas