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