0

我正在制作一个游戏,您可以使用箭头键控制角色并使用“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”时冷却计时器启动的东西。另外,我希望精灵(处于攻击状态)随着延迟而回到“站立”状态。提前致谢

4

2 回答 2

2

这是我要做的:

我会为最后一次攻击的时间创建一个变量,并将所有与攻击相关的代码移动到另一个函数。我假设时间以毫秒为单位,所以你可能希望你的延迟达到数百个。

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;
} 

然后在你的攻击()函数中,你可以进行碰撞检测。

于 2013-01-16T03:17:33.217 回答
0

好的,

1-尝试为 DELAY 分配更大的值

2-打印“时间”值以查看每个循环添加到 DELAY 的量,如果它是一个大值 - 大于 0.00x - 将它除以

另一件事:把“冷却时间-=时间”放在“A按下”括号外面不好,强制用户每次要射击时按住A键一定时间

于 2013-01-15T23:46:22.977 回答