Javascript (游戏编程)如何增加攻击之间的延迟?

Javascript (游戏编程)如何增加攻击之间的延迟?,javascript,time,delay,timedelay,Javascript,Time,Delay,Timedelay,我正在做一个游戏,你用箭头键控制你的角色,用“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) {

我正在做一个游戏,你用箭头键控制你的角色,用“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();
        }
    }
var延迟=2;
var冷却时间=0;
功能更新(时间){
//向上
如果(38英寸向下键){
player.y-=player.speed*时间;
}
//向下
如果(40英寸向下键){
player.y+=player.speed*时间;
}
//左
如果(37英寸向下){
player.x-=player.speed*时间;
}
//对
如果(39英寸向下键){
player.x+=player.speed*时间;
}
//“A”
如果(65英寸向下){
player.attacking=true;
冷却时间-=时间;
}
其他的
player.attacking=false;
//碰撞
如果((player.x+pImage.width-5)>=monster.x&&
(player.x+pImage.width-5)=monster.y&&player.y<(monster.y+enImage.height)&&
球员(进攻)
{
如果(冷却正常

1-尝试为延迟分配更大的值

2-打印“时间”值,以查看如果延迟值较大(大于0.00x),则每个循环会增加多少延迟

还有一件事: 将“冷却时间-=时间”放在“A按下”括号外
每次用户想要拍摄时,强制用户按住A按钮一定时间是不好的

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

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()函数中,您可以执行碰撞检测。

我成功地使其工作,我在按键事件中输入了“A”而不是keydown.:)只是出于好奇,当您输入“keydown”时,您是否能够在每次按下“A”键时进行攻击?