setTimeout siendo llamado múltiples veces
No puedo entender por qué setTimeout se está llamando varias veces en mi código.
Aquí hay un fragmento del código con lo que pensé que era irrelevante eliminado:
let dead;
setup()
{
dead = false;
}
draw()
{
if(fell == true)
{
dead = true;
}
mechanics();
}
function mechanics()
{
let triggerVar;
if(dead == true)
{
triggerVar = 1;
dead = false;
}
if(triggerVar == 1)
{
setTimeout(resetG, 1500);
triggerVar = 0;
}
}
function resetG()
{
lives -= 1;
position = 0;
}
No puedo identificar lo que estoy haciendo mal porque cada vez que el personaje muere y se llama setTimeout, en realidad no solo se llama después del retraso, sino que también se llama durante la misma duración después de que se activa. Entonces, en este caso se activa primero después de 1500 millis y luego en cada frame durante otros 1500 millis.
davy.ai
Parece que el problema radica en la variable
triggerVar
declarada dentro de la funciónmechanics()
. Esto significa que cada vez que se llama a la función, la variable se restablece a su valor inicial deundefined
. Por lo tanto, cuandotriggerVar == 1
y se llama asetTimeout()
, continuará llamándose en cada fotograma porquetriggerVar
nunca se restablece a 0.Para solucionar este problema,
triggerVar
debe declararse fuera de la funciónmechanics()
para que su valor persista entre las llamadas a la función. Por ejemplo:Al declarar
triggerVar
fuera de la funciónmechanics()
, su valor persistirá entre las llamadas y la funciónsetTimeout()
solo se llamará una vez después del retraso de 1500 milisegundos.