当我想跳转时,我正在研究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);
}
}
链接到我的游戏
答案 0 :(得分:1)
一种选择是创建一个持久性布尔变量,例如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
。如果要在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 });