javascript - 按键之间无延迟

标签 javascript jquery delay keypress 2d-games

我正在制作一个游戏,但遇到了一个问题,因为当按住左键时, Angular 色应该向左走,而当按住右键时, Angular 色应该向右走。这一切都有效,但问题是当按下一个键时, Angular 色会向相应的方向稍微移动,等待大约半秒,直到计算机意识到该键被按下,然后 Angular 色会按照我想要的方式移动。如何消除按住按键后的延迟?这是我移动 Angular 色的代码。

$(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>

最佳答案

If you want key repeat in a controllable fashion, you will have to implement it yourself, as keypress events are fired dependent on the OS's idea of how keys should repeat. That means there may be variable initial and following delays, and holding down two keys at once will cause only one of them to repeat.

我从 this 获取了代码(和引用)回答并将其与您的代码混合一点,以便它可以与您的 #player 元素一起使用。请查看该链接中的问题和答案。我删除了原始注释,以使此处发布的代码更短,但它们很有用,因此您知道自己在做什么。

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

关于javascript - 按键之间无延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29190896/

相关文章:

ruby-on-rails - rails : using "content_for" after the corresponding "yield" inside layout

javascript - JS/jQuery 延迟循环以获得期望的结果(延迟()不工作)

mysql - 延迟插入的多个索引的缺点? - MySQL

javascript - 三个Js Texture不会出现

JavaScript 变量作为函数并获取返回的数据

php - 如何使用 jQuery 提交函数将表单选中的复选框作为数组传递到 PHP 页面?

javascript - 在元素加载后立即运行一些 JS 的最佳方式?

javascript - jQuery 为图像标签创建了不正确的元素

javascript - 隐藏图表标签

jquery - Coldfusion 9 JSON解析错误