7

我正在使用 Gamepad API - 特别是使用控制器上的操纵杆的轴。这些位置经常更新 - 因此,我正在听的事件(棒上的移动)也发生了很多。有没有办法将它限制在每秒 25 次以减少延迟?

4

3 回答 3

14

您无法限制触发 JavaScript 事件的速率,但您的事件处理程序可以选择对某些调用不执行任何操作。这是一个使用示例mousemove(我不知道您在谈论哪个 Gamepad API):

var lastMove = 0;
document.addEventListener('mousemove', function() {
    // do nothing if last move was less than 40 ms ago
    if(Date.now() - lastMove > 40) {
        // Do stuff
        lastMove = Date.now();
    } 
});

http://jsfiddle.net/jk3Qh/

于 2013-02-02T22:08:49.183 回答
1

你可以做这样的事情,检查你的事件在 1 秒间隔内被调用的频率以及你是否处理它。代码示例,我在想什么的粗略轮廓(没有保证(像那个拼写))。

function process_event() {
var curr = new Date().getTime();
if ((curr - timeObj.last) < 1000) { //One Second 
     if (timeObj.counter > 25) {
        for (var x=0;x<timeObj.times;x++) {
             if ((curr - timeObj.times[x]) >= 1000) {
                   timeObj.times.splice(x, 1);
                   timeObj.counter -= 1;
             }
        }
     }
     else { 
         timeObj.counter += 1;
         timeObj.times[timeObj.times.length()-1] = curr;
     }
}
else {
    timeObj.counter = 0;
    timeObj.times = [];
}
if (timeObj.counter > 25) {
    return False
 }  
 else {
   return True
 } 
}
于 2013-02-02T22:19:17.323 回答
0

初始化一个变量,该变量在每次事件侦听器激活时递增。使事件侦听器输出的函数仅在变量低于 25 时发生。

于 2013-02-02T22:07:43.453 回答