Я играю с Gamepad API - в частности, оси, используя джойстики на контроллере. Положение этих обновлений много и часто - как таковое, событие, которое я слушаю (движение на палках), также часто случается. Есть ли способ ограничить это, скажем, 25 раз в секунду, чтобы уменьшить задержку?

6
user2036108 3 Фев 2013 в 02:04

4 ответа

Лучший ответ

Вы не можете ограничить скорость, с которой запускаются события JavaScript, но ваш обработчик событий может решить ничего не делать для некоторых вызовов. Вот пример использования mousemove (я не знаю, о каком API Gamepad вы говорите):

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/

10
bfavaretto 2 Фев 2013 в 22:30

Вы можете сделать что-то вроде этого, где вы проверяете, как часто ваше событие вызывается с интервалом в 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
 } 
}
1
Sean McCully 2 Фев 2013 в 22:19

Инициализируйте переменную, которая увеличивается каждый раз, когда активируется прослушиватель событий. Сделайте так, чтобы функция, которую выводит прослушиватель событий, возникала только тогда, когда переменная меньше 25.

0
David 2 Фев 2013 в 22:07

Я уверен, что это может быть лучше. ;) но не верьте мне на слово. лол. функция отслеживания движения будет той функцией, которую вы хотите запускать 25 раз в секунду.

setInterval(movementTracking(), 40)

Прочтите об этом краткое содержание -> https://www.w3schools.com/jsref/met_win_setinterval.asp

0
N Djel Okoye 31 Окт 2018 в 10:55