如何使键盘按钮不会在javascript中发送垃圾邮件。 (延迟)

时间:2018-08-08 03:22:57

标签: javascript babylonjs

当我想跳转时,我正在研究Babylon.js。我找到了一个网站,并复制了它的跳转代码,效果很好!但是我想做一个真实的游戏,我不想让垃圾邮件的人飞起来。我怎么能让它有几秒钟的延迟,以致没人能继续按垃圾邮件键来飞行呢?

function jump(){
  camera.cameraDirection.y = 2;
}

document.body.onkeyup = function(e){
  if(e.keyCode == 32){
    //your code
    console.log("jump");
    setTimeout(jump(), 1000); 

  }
}

链接到我的游戏

https://playground.babylonjs.com/#JCE1G3

2 个答案:

答案 0 :(得分:1)

一种选择是创建一个持久性布尔变量,例如justJumped,并且仅当justJumpedfalse时才跳转。跳跃时,将justJumped设置为true,并创建一个超时,将其在跳跃持续时间后重置为false,这似乎不到半秒:

let justJumped = false;
document.body.onkeyup = function(e) {
  if (e.keyCode == 32 && !justJumped) {
    justJumped = true;
    setTimeout(() => justJumped = false, 400)
    console.log("jump");
    jump();
  }
}

还请注意,setTimeout(jump(), 1000);可能没有按照您的想法去做-它会立即调用jump 。如果要在1000毫秒后调用jump函数,只需传递函数名称本身

let justJumped = false;
document.body.onkeyup = function(e) {
  if (e.keyCode == 32 && !justJumped) {
    justJumped = true;
    setTimeout(() => justJumped = false, 1400)
    console.log("jump");
    setTimeout(jump, 1000);
  }
}

答案 1 :(得分:0)

您还可以使用其他库来实现它。我最喜欢的是lodash。您可以使用_.throttle

var throttled = _.throttle(jump, 1000);
document.body.onkeyup = function(e) {
    if (e.keyCode == 32) {
       throttled()
    }
}

如果您不想在第一次按键后立即跳起来。您可以添加选项trailing: false

var throttled = _.throttle(jump, 1000, { 'trailing': false });