【问题标题】:No delay between key press按键之间没有延迟
【发布时间】:2015-03-22 04:10:50
【问题描述】:

我正在制作游戏并且遇到问题,因为当按住左键时,角色应该向左,而当按住右键时,角色应该向右。这一切正常,但问题是当按下一个键时,角色会向相应的方向轻微移动,等待大约半秒,直到计算机意识到按键被按住,然后角色会按照我的意愿移动。按住键后如何摆脱延迟?这是我移动角色的代码。

$(document).keydown(function(key) {
    switch(parseInt(key.which, 10)) {
        case 37:
            $('#player').animate({left:'-=5px'}, 1);
            break;
        case 39:
            $('#player').animate({left:'+=5px'}, 1);
            break;
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【问题讨论】:

    标签: javascript jquery delay keypress 2d-games


    【解决方案1】:

    如果您希望以可控的方式重复按键,则必须 自己实现它,因为按键事件的触发取决于 操作系统关于键应该如何重复的想法。这意味着可能有变数 初始延迟和后续延迟,同时按住两个键将 只让其中一个重复。

    我从this 答案中获取了代码(和那句话),并将其与您的代码混合了一下,因此它适用于您的#player 元素。请查看该链接中的问题和答案。我删除了原始 cmets 以缩短此处发布的代码,但它们很有用,因此您知道自己在做什么。

    代码(jsFiddle):

    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“重复”参数(老实说有点随机)。使用这些参数,看看你最喜欢什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-25
      • 2012-07-18
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多