Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使gamepad键发射速度变慢?_Javascript_Google Chrome_Controller - Fatal编程技术网

Javascript 如何使gamepad键发射速度变慢?

Javascript 如何使gamepad键发射速度变慢?,javascript,google-chrome,controller,Javascript,Google Chrome,Controller,我目前正在用html5、css和javascript制作一个游戏,它可以正常工作,但当我按下有线xbox360控制器上的一个按钮时,它会在不到一秒钟内触发我设置了近50次的回调 如何使用JavaScript中的Gamepad API使回调每秒只触发一次 我试过使用这样的冷却计时器 var pressCool = false; if(buttonPressed(xbox.stick2)){ if(!pressCool){ var e = jQuery.Event("key

我目前正在用html5、css和javascript制作一个游戏,它可以正常工作,但当我按下有线xbox360控制器上的一个按钮时,它会在不到一秒钟内触发我设置了近50次的回调

如何使用JavaScript中的Gamepad API使回调每秒只触发一次

我试过使用这样的冷却计时器

var pressCool = false;

if(buttonPressed(xbox.stick2)){
    if(!pressCool){
        var e = jQuery.Event("keydown");
        e.keyCode = keys.custom.stick2;
        $(document).trigger(e);
        pressCool = true;
    }
}

setTimeout(function(){
    if(pressCool){
        pressCool = false;
    }
}, 1000);

但这仍然给了我不止一次的回调。

您的
设置超时
回调实际上什么都不做。每次通话时,它只检查是否设置了
pressCool
标志,但它始终等于
false
,因此该条件永远不会为真

setTimeout
之外的代码只运行一次。然而,似乎必须在每个游戏帧上调用它(游戏循环迭代)

您必须将与游戏循环迭代相关的所有代码放在一个函数中,并将其调用放在
setTimeout
callback中

因此,您的代码应该如下所示:

...
function update() {
    if(pressCool){
        pressCool = false;
    }
    if(buttonPressed(xbox.stick2)){
        if(!pressCool){
            var e = jQuery.Event("keydown");
            e.keyCode = keys.custom.stick2;
            $(document).trigger(e);
            pressCool = true;
        }
    }
    ...
}

setTimeout(function(){
    update();
}, 1000);

另外,我建议您阅读与您的问题相关的文档。

@hindsmost为什么需要我的代码?我不是在我的代码上寻求帮助,也不是在问代码,而是在问我将如何做某事。如果没有代码,你的问题是离题的,因为太宽泛了。当我问一件事时,我的问题怎么会太宽泛了?没有任何意义。你没有努力解决你的问题,现在希望有人帮你解决。这是结束您的问题的原因。然而,我还没有投票关闭它,也没有投票否决它。与此相反,我建议你拿出自己努力的证据。好吧,我会补充一些证据。@Mackan90096如果这个答案能解决你的问题,你也可以对它进行投票