Estoy creando un juego usando un lienzo html en el que quiero verificar ciertas condiciones cada vez en el bucle animado y si esa condición se vuelve verdadera una vez, entonces no quiero verificar los próximos 3 segundos y después de 3 segundos quiero verificar nuevamente . Me gusta
function animate(){ requestAnimationFrame(animate) if (checking something){ if this if statement gets executed then don't check this if statement for next 3 seconds }Esto puede sonar un poco confuso, pero ¿hay alguna forma de hacerlo?
Mi sugerencia sería agregar una bandera: otra variable que puede usar para verificar si se debe realizar una operación y otra función que alternará la bandera después de una cierta cantidad de tiempo.
// THE CHECKING FLAG let shouldCheckCondition = true; function animate(){ requestAnimationFrame(animate) // CHECK THE FLAG FIRST, IF SHOULD NOT CHECK, EXIT THE FUNCTION if (!shouldCheckCondition) return; if (condition){ // DISABLE THE CHECKING FLAG SO YOU SKIP THE SUBSEQUENT CHECKS shouldCheckCondition = false; // DO SOMETHING WHEN CONDITION IS MET AND CHECKING SHOULD BE DONE // ENABLE THE CHECKING FLAG AFTER 3 second setTimeout(() => { shouldCheckCondition = true; }, 3000); }Si desea hacerlo en línea dentro de otro método, es posible que setInterval no ayude.
Simplemente puede tomar nota de la última vez que realizó esa verificación (por ejemplo, la hora del sistema en milisegundos) y luego asegurarse de que hayan pasado más de 3000 ms después de eso la próxima vez que realice la verificación.
date.valueOf(); //An existing date object to milliseconds format (new Date()).valueOf(); //current time in ms Puede tener dos var s lastCheckedTime y currentTime .
requestAnimationFrame intenta ejecutarse en el siguiente cuadro, no después de tres segundos. Así que no uses requestAnimationFrame si quieres tres segundos.
function animate(){ if (checking something){ setTimeout(animate, 3000); } else { requestAnimationFrame(animate); } }