Javascript 按键之间没有延迟

Javascript 按键之间没有延迟,javascript,jquery,delay,keypress,2d-games,Javascript,Jquery,Delay,Keypress,2d Games,我正在做一个游戏,我遇到了一个问题,因为当按下左键时,角色应该向左移动,当按下右键时,角色应该向右移动。这一切都是可行的,但问题是当按下一个键时,角色会朝相应的方向轻微移动,等待大约半秒钟,直到计算机意识到该键被按下,然后角色会按我希望的方式移动。按下钥匙后,如何消除延迟?这是我移动角色的代码 $(文档).keydown(函数(键){ 开关(parseInt(key.which,10)){ 案例37: $(#player')。设置动画({left:'-=5px'},1); 打破 案例39: $

我正在做一个游戏,我遇到了一个问题,因为当按下左键时,角色应该向左移动,当按下右键时,角色应该向右移动。这一切都是可行的,但问题是当按下一个键时,角色会朝相应的方向轻微移动,等待大约半秒钟,直到计算机意识到该键被按下,然后角色会按我希望的方式移动。按下钥匙后,如何消除延迟?这是我移动角色的代码

$(文档).keydown(函数(键){
开关(parseInt(key.which,10)){
案例37:
$(#player')。设置动画({left:'-=5px'},1);
打破
案例39:
$('#player')。动画({left:'+=5px'},1);
打破
}
});
如果您希望以可控的方式重复关键点,则必须 您自己实现它,因为按键事件是根据 操作系统关于键应该如何重复的想法。这意味着可能存在变量 初始和后续延迟,同时按住两个键将 只让其中一个重复

我从answer中提取了代码(以及那句话),并将其与您的代码混合了一点,因此它与您的
#player
元素一起工作。请查看该链接中的问题和答案。我删除了原来的注释,以缩短这里发布的代码,但是它们很有用,这样您就知道自己在做什么

代码():

function KeyboardController(keys, repeat) {

    var timers= {};

    document.onkeydown= function(event) {
        var key= (event || window.event).keyCode;
        if (!(key in keys))
            return true;
        if (!(key in timers)) {
            timers[key]= null;
            keys[key]();
            if (repeat!==0)
                timers[key]= setInterval(keys[key], repeat);
        }
        return false;
    };

    document.onkeyup= function(event) {
        var key= (event || window.event).keyCode;
        if (key in timers) {
            if (timers[key]!==null)
                clearInterval(timers[key]);
            delete timers[key];
        }
    };

    window.onblur= function() {
        for (key in timers)
            if (timers[key]!==null)
                clearInterval(timers[key]);
        timers= {};
    };

}

KeyboardController({
    37: function() { $('#player').animate({left:'-=5px'}, 100); },
    39: function() { $('#player').animate({left:'+=5px'}, 100); }
}, 100);
我还调整了你的动画设置和KeyboardController“repeat”参数,使之符合我的喜好(说实话,有些随意)。玩这些参数,看看你最喜欢什么