当我想要跳跃的时候,我正在开发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);
}
}
链接到我的游戏
发布于 2018-08-08 03:28:39
一种选择是创建一个持久的布尔变量,比如justJumped
,只有在justJumped
为false
时才跳转。跳转时,将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
。如果您想在1000ms之后调用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);
}
}
发布于 2018-08-08 03:53:29
您也可以使用其他库来实现它。我最喜欢的是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 });
https://stackoverflow.com/questions/51738183
复制