(游戏编程)如何在攻击之间添加延迟?
问题描述:
我在做一个游戏,你用箭头键控制你的角色并用'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;
}
然后在您的攻击()函数中,您可以执行碰撞检测。
答
好吧,
1拉升DELAY
2 - 打印分配一个较大的值“时间”值,看看有多少你每次循环增加延迟,如果它是一个大值 - 大于0.00X大 - 把它
另一件事: 放置“冷却 - =时间”外“A按下”括号 这不是很好,迫使用户按住A键一定每次他想拍摄的时间量
似乎无法正常工作:(但是,无论如何感谢 – Zik
我设法让它工作,我把'A'放在按键事件而不是keydown :) – Zik
只是出于好奇,当你有“keysDown” ,你每次按下'A'键都能攻击吗? –