3

我正在创建小游戏,其中我的对象使用箭头键左右移动,但移动速度不快,甚至没有交互性,就像我稍后按下键对象移动时一样。任何人都可以建议我如何在用户体验方面做得更好。

这是我控制移动物体的代码的一部分(它的两个玩家游戏,所以箭头键是一个,AWD 是第二个)

$(document).keydown(function(e){

switch(e.keyCode){
    //Move left
    case 37:
    $('.playerOne').stop().animate({"left":"-=15px"}, '1000', 'linear');
    return false;
    break;
    //Move right
    case 39:
    $('.playerOne').stop().animate({"left":"+=15px"}, '1000', 'linear');
    return false;
    break;
    //Shoot
    case 38:
    shotEffect(1,'hitOne','bottom','playerOne');
    break;
    //Move right
    case 68:               
            $('.playerTwo').stop().animate({"left":"+=15px"}, '1000', 'linear');
    return false;
    break;
    //Move left
    case 65:
    $('.playerTwo').stop().animate({"left":"-=15px"}, '1000', 'linear');
    return false;
    break;
    //Shoot
    case 87:
    shotEffect(1,'hitTwo','top','playerTwo');
    break;
}

});

提前致谢

4

1 回答 1

4

对键盘输入响应缓慢的原因之一是您正在侦听 JavaScriptkeydown事件或类似的键盘事件。但是,重复的键盘事件受用户控制面板中设置的键盘初始重复延迟和重复率的影响。

例如,在具有默认设置的 Windows 系统上,初始键盘延迟设置得相当长——在半秒左右。因此,keydown当您按下键时,您会立即得到一个首字母,但第一个重复keydown不会在另一半秒内发生。在初始延迟之后,keydown事件的频率取决于用户的重复率。

相反,您需要做的是随时跟踪哪些键被关闭,然后在您的游戏循环中 - 大概使用requestAnimationFrame()或- 检查setInterval()当前哪些键被关闭。这样,键盘重复计时不受用户设置控制,而是由游戏循环的速度控制。

一种简单的方法是使用keydrow 库。尝试该页面上的演示,看看它是否满足您的需求。

此外,这是一个StackOverflow 答案,其中讨论了该问题和一些类似的代码。

在两者之间,我建议使用 keydrow,因为它更完善,但也值得一看 SO 答案。

当然,您的代码中也可能存在其他问题,但这是绝对要解决的问题。

于 2013-07-04T17:25:29.243 回答