我正在制作一款游戏,您可以使用方向键控制 Angular 色并使用“A”进行攻击。我的问题是攻击没有延迟,所以当我按住“A”时,敌人的生命值会迅速耗尽。如何添加延迟?我尝试添加延迟,这是我的代码:
var DELAY = 2;
var cooldown = 0;
function update(time) {
// UP
if (38 in keysDown) {
player.y -= player.speed * time;
}
// DOWN
if (40 in keysDown) {
player.y += player.speed * time;
}
// LEFT
if (37 in keysDown) {
player.x -= player.speed * time;
}
// RIGHT
if (39 in keysDown) {
player.x += player.speed * time;
}
// 'A'
if(65 in keysDown) {
player.attacking = true;
cooldown -= time;
}
else
player.attacking = false;
// Collision
if( (player.x + pImage.width-5) >= monster.x &&
(player.x + pImage.width-5) < monster.x + enImage.width &&
player.y >= monster.y && player.y < (monster.y + enImage.height) &&
player.attacking)
{
if(cooldown <= 0) {
monster.hp -= player.dmg;
cooldown = DELAY;
}
if(monster.hp <= 0) {
relocEn();
}
}
}
问题是冷却时间仅在我按住“A”时才计算,并且仅在玩家接触怪物时才重置。我想要像当我按“A”时冷却计时器启动的东西。另外,我希望 Sprite (处于攻击状态)随着延迟而回到“站立”状态。提前致谢
最佳答案
这就是我要做的:
我会为上次攻击的时间创建一个变量,并将与攻击相关的所有代码移至另一个函数。我假设时间以毫秒为单位,因此您可能希望延迟达到数百。
var DELAY = 400; //Change this to a higher value if it's not long enough.
var timeSinceLastAttack = -400; // The opposite of the DELAY if you want to attack at the start.
function update(time) {
...
// 'A'
if(65 in keysDown
&& time > (timeSinceLastAttack + DELAY) ) {
player.attack();
timeSinceLastAttack = time;
}
然后在你的attack()函数中你可以进行碰撞检测。
关于javascript - (游戏编程)如何在攻击之间添加延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14290424/