x秒后触发键(持续按下该键)

时间:2019-04-15 12:06:53

标签: javascript

代码以下列方式工作:
-按住拍摄/放下按钮可生成子弹和在画布上绘制/显示的炸弹,
-它始终以每秒刷新60次的速度执行函数绘制。

我想将sth设置为:
-setInterval(拍摄,1000);
-setInterval(drop,2000);

所以应该像这样:
-用户按下键时,会以1/2秒的间隔创建项目符号/炸弹
-这一切都应该在没有意识到密钥的情况下发生

下面我提供了示例代码:

let left = false;
let up = false;
let right = false;
let down = false;
let shoot = false;
let drop = false;

document.onkeydown = function (e) {
    if (e.keyCode == 37) left = true;
    if (e.keyCode == 38) up = true;
    if (e.keyCode == 39) right = true;
    if (e.keyCode == 40) down = true;
    if (e.keyCode == 17) shoot = true;
    if (e.keyCode == 32) drop = true;
    e.preventDefault();
}
document.onkeyup = function (e) {
    if (e.keyCode == 37) left = false;
    if (e.keyCode == 38) up = false;
    if (e.keyCode == 39) right = false;
    if (e.keyCode == 40) down = false;
    if (e.keyCode == 17) shoot = false;
    if (e.keyCode == 32) drop = false;
    e.preventDefault();
}


function draw() {
requestAnimationFrame(draw);

if (shoot) {
    bullet = new Bullet(player.x - 3, player.y - 3, 6, 10)
    bullets.push(bullet);
}
for (i = 0; i < bullets.length; i++) {
    bullets[i].show();
    bullets[i].move();
}

if (drop) {
    bomb = new Bomb(player.x - 8, player.y + 50, 16, 1)
    bombs.push(bomb);
}
for (i = 0; i < bombs.length; i++) {
    bombs[i].show();     
    bombs[i].move();
}

}

requestAnimationFrame(draw);

远程服务器上的完整代码:
https://stacho163.000webhostapp.com

这是在我的代码中做到这一点的一种方式,还是我不得不更改按钮的工作方式?
如果有没有jQuery的解决方案,那就太好了。

e:检查了第一个技巧,但是在创建了第一个单个的项目符号/炸弹之后,它便像以前一样工作。

谢谢您的提示:)

1 个答案:

答案 0 :(得分:2)

您应该设置某种等待变量,该变量表示当前已按下该键,并且不需要进行任何处理:

AutoMapper.Mapper.Initialize(c =>
{
    c.AllowNullCollections = true;
});

这样,炸弹只会每1秒掉落一次。冲洗并重复:)