所以,我试图实现的是一个伤害系统,所以当敌人靠近玩家时(玩家在屏幕上),他们就会受到伤害。然而,由于在同一时间屏幕上有多个敌人,我不希望玩家被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秒,然后在每个节拍中运行一次外卖健康命令,因此它只等待一次。
我在adobe animate,html5画布上工作,如果这能改变什么的话
发布于 2020-11-21 16:02:26
即使有适当的延迟,重复敌人的长度仍然会夺走相同数量的生命,只是,是的。一次延迟。
相反,我会做的是取消生命值,禁用命中检测,然后设置一个计时器,在此期间玩家是无敌的。这样,玩家可以一次击球一次,并有时间跑开。
发布于 2020-11-21 15:32:55
setTimeout函数基本上在同一时间被调用,但会被调用,因为enemy.length循环的每次迭代都不会等待setTimeout回调完成。如果您将一个console.log添加到drop函数中,您将看到它被多次调用。如果您希望在for循环中按索引添加延迟,则可以更改为:
setTimeout(drop, 2000 * (x + 1))https://stackoverflow.com/questions/64940655
复制相似问题