Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.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 html5画布上的键输入不总是响应_Javascript_Html - Fatal编程技术网

Javascript html5画布上的键输入不总是响应

Javascript html5画布上的键输入不总是响应,javascript,html,Javascript,Html,我试图在一个简单的弹跳球示例中实现关键点输入,但有些功能没有正确响应。例如,如果我尝试停止整个移动,它会工作,但键盘的精度并不总是相同的。我猜这可能是由于循环,我的意思是,因为我在循环中要求输入,计算机的答案不一样,取决于我按下键的时刻。我还试图暂停循环,设置一个条件来调用循环本身,当我使用鼠标时,这是有效的,但当我使用键盘时,它不起作用 你可以在这里看到代码,涉及到的键是“D”来启动和停止移动,“s”和“a”来减速和加速,箭头来移动,空格来暂停。暂停根本不起作用。它暂停动画,但不重新加载动画

我试图在一个简单的弹跳球示例中实现关键点输入,但有些功能没有正确响应。例如,如果我尝试停止整个移动,它会工作,但键盘的精度并不总是相同的。我猜这可能是由于循环,我的意思是,因为我在循环中要求输入,计算机的答案不一样,取决于我按下键的时刻。我还试图暂停循环,设置一个条件来调用循环本身,当我使用鼠标时,这是有效的,但当我使用键盘时,它不起作用

你可以在这里看到代码,涉及到的键是“D”来启动和停止移动,“s”和“a”来减速和加速,箭头来移动,空格来暂停。暂停根本不起作用。它暂停动画,但不重新加载动画


非常感谢。

我快速使用了您的代码笔,并通过完全删除logicLoop并检查animationFrame循环中的d键使其正常工作:

function graphicLoop(){
    context.clearRect(0,0,canvas.width,canvas.height);      // Clean the canvas
    draw();
    requestAnimationFrame(graphicLoop);

    if(keys[68]){ 
        update();
    }
}
graphicLoop();

但这有点不同。我不希望球在按下键的同时移动,而是像我的代码那样停止它们或让它们移动一次(识别输入有困难)。另一个问题与空格键有关,因为它会冻结但不会解冻。我明白了。无论如何,我建议使用一个使用requestAnimationFrame的中心循环,并从那里调用logicLoop函数。还可以尝试在触发onkeydown的按键功能中处理单次按键,而不是检查循环中的按键是否已按下。