(游戏编程)如何在攻击之间添加延迟?

问题描述:

我在做一个游戏,你用箭头键控制你的角色并用'A'攻击。我的问题是,袭击没有延迟,所以当我持有'A'时,敌人的HP迅速耗尽。我如何添加延迟?我尝试添加延迟,这里是我的代码:(游戏编程)如何在攻击之间添加延迟?

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'冷却定时器启动时一样。另外,我希望精灵(处于攻击状态)跟随延迟并回到“站立”状态。在此先感谢

下面是我会做的:

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

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

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

+0

似乎无法正常工作:(但是,无论如何感谢 – Zik

+1

我设法让它工作,我把'A'放在按键事件而不是keydown :) – Zik

+0

只是出于好奇,当你有“keysDown” ,你每次按下'A'键都能攻击吗? –

好吧,

1拉升DELAY

2 - 打印分配一个较大的值“时间”值,看看有多少你每次循环增加延迟,如果它是一个大值 - 大于0.00X大 - 把它

另一件事: 放置“冷却 - =时间”外“A按下”括号 这不是很好,迫使用户按住A键一定每次他想拍摄的时间量