我正在制作一个游戏,用箭头键控制你的角色并用'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'时冷却计时器一样。此外,我希望精灵(处于攻击状态)伴随延迟并返回“站立”状态。提前致谢
答案 0 :(得分: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;
}
然后在你的attack()函数中你可以进行碰撞检测。
答案 1 :(得分:0)
好,
1-尝试为DELAY
指定更大的值2-打印“时间”值以查看每个循环向DELAY添加多少(如果它是一个大值 - 大于0.00x - 除以它
另一件事: 将“冷却时间 - =时间”放在“按下的”括号之外 每次他想拍摄时强迫用户按住A按钮一段时间是不好的