setTimeout() 仅 运行 一次,多次调用时
setTimeout() only running once, when called multiple times
所以,我想要完成的是一个伤害系统,所以当敌人靠近玩家时(在玩家在屏幕上的位置内)他们会受到伤害。然而,由于屏幕上同时有多个敌人,我不希望玩家被 10 个堆叠轰炸并立即死亡。所以这是我的解决方案。
createjs.Ticker.addEventListener("tick", damage1);
function drop() {
if (eX > p1.x - 40 && eX < p1.x + 40) {
health -= 1;
console.log("Health is: " + health);
}
}
function damage1() {
for (x = 0; x < enemy.length; x++) {
eX = enemy[x].x;
eY = enemy[x].y;
if (eY > p1.y - 25 && eY < p1.y + 25) {
setTimeout(drop, 2000);
}
}
}
然而,这并不像我预期的那样有效。我认为会发生的是,如果 if 语句通过,它会设置超时,等待 2 秒,然后到达它带走健康的功能。然而实际发生的是超时,等待 2 秒,然后每次 tick 运行一次外卖健康命令,所以它只等待一次。
我正在使用 adobe animate 工作,html5 canvas 如果这有任何改变
setTimeout
函数基本上同时被调用,但是 enemy.length
次,因为 for 循环的每次迭代都不会等待 setTimeout
回调完成。如果将 console.log
添加到 drop
函数中,您会看到它被多次调用。如果你想在 for 循环中为每个索引添加延迟,你可以更改为:
setTimeout(drop, 2000 * (x + 1))
即使有适当的延迟,遍历敌人的长度仍然会带走相同数量的生命值,只是,是的..延迟。
我会做的是带走健康,禁用命中检测,然后设置一个计时器,在此期间玩家是无敌的。这样,玩家一次只需要一击,就有时间 运行 离开。
所以,我想要完成的是一个伤害系统,所以当敌人靠近玩家时(在玩家在屏幕上的位置内)他们会受到伤害。然而,由于屏幕上同时有多个敌人,我不希望玩家被 10 个堆叠轰炸并立即死亡。所以这是我的解决方案。
createjs.Ticker.addEventListener("tick", damage1);
function drop() {
if (eX > p1.x - 40 && eX < p1.x + 40) {
health -= 1;
console.log("Health is: " + health);
}
}
function damage1() {
for (x = 0; x < enemy.length; x++) {
eX = enemy[x].x;
eY = enemy[x].y;
if (eY > p1.y - 25 && eY < p1.y + 25) {
setTimeout(drop, 2000);
}
}
}
然而,这并不像我预期的那样有效。我认为会发生的是,如果 if 语句通过,它会设置超时,等待 2 秒,然后到达它带走健康的功能。然而实际发生的是超时,等待 2 秒,然后每次 tick 运行一次外卖健康命令,所以它只等待一次。
我正在使用 adobe animate 工作,html5 canvas 如果这有任何改变
setTimeout
函数基本上同时被调用,但是 enemy.length
次,因为 for 循环的每次迭代都不会等待 setTimeout
回调完成。如果将 console.log
添加到 drop
函数中,您会看到它被多次调用。如果你想在 for 循环中为每个索引添加延迟,你可以更改为:
setTimeout(drop, 2000 * (x + 1))
即使有适当的延迟,遍历敌人的长度仍然会带走相同数量的生命值,只是,是的..延迟。
我会做的是带走健康,禁用命中检测,然后设置一个计时器,在此期间玩家是无敌的。这样,玩家一次只需要一击,就有时间 运行 离开。