Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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中的setInterval计时器是否已完成_Javascript_Html_Setinterval - Fatal编程技术网

检测javascript中的setInterval计时器是否已完成

检测javascript中的setInterval计时器是否已完成,javascript,html,setinterval,Javascript,Html,Setinterval,我试图用Javascipt构建一个HTML5蛇游戏。我还有一个主要问题需要解决,经过几个小时的思考后,我无法解决它 这与按箭头键时的设置间隔和蛇行运动有关。当快速按下箭头键时。。几乎就像多次按键一样,游戏结束了(这意味着蛇在自己身上奔跑时结束) 解释问题的工作模式: 情境:蛇正在向下移动,当我快速按下向左箭头和向上箭头时,蛇会在自己身上跑过去(只向上移动),因为向左箭头的时间间隔立即被清除。相反,它应该先向左移动,然后再向上移动 我试图存储在数组中按下的箭头键,但无法处理这种情况 例如: 变量a

我试图用Javascipt构建一个HTML5蛇游戏。我还有一个主要问题需要解决,经过几个小时的思考后,我无法解决它

这与按箭头键时的设置间隔和蛇行运动有关。当快速按下箭头键时。。几乎就像多次按键一样,游戏结束了(这意味着蛇在自己身上奔跑时结束)

解释问题的工作模式:

情境:蛇正在向下移动,当我快速按下向左箭头和向上箭头时,蛇会在自己身上跑过去(只向上移动),因为向左箭头的时间间隔立即被清除。相反,它应该先向左移动,然后再向上移动

我试图存储在数组中按下的箭头键,但无法处理这种情况

例如:

变量arrowArray=[];/*存储按下的箭头键*/

//按箭头数组[0]中存储的方向上的setInterval键(移动箭头、计时器)

//arrowArray.shift()删除蛇移动的当前方向,并为arrowArray中的下一个方向让路[0]

现在,当快速按下箭头键时,如何等待蛇向一个方向移动,然后再向第二个方向移动。尝试在setTimeout内使用setInterval等待计时器结束,但未成功


帮助?

这里有一个想法:与其用箭头键清除间隔并重新开始,不如让箭头键改变蛇在下一帧的移动方向。这避免了每当我改变蛇的方向时所看到的小小延迟。箭头键应该只设置下一个移动方向。然后,当间隔函数再次运行时,它会检查下一个方向是否有效。这解决了蛇试图朝相反方向移动的问题。

试试这个:在按键处理程序中,执行
arroarray.push(newDirection)
并在每一帧中,将新方向移开或使用当前方向。这样,蛇每帧可以改变一次方向,如果蛇向下移动,那么用户在下一帧出现之前按right、up、right、down将导致正确的事情发生。

你是对的。通过使用箭头键只改变方向,并使用setInterval绘制蛇,避免了方向改变时的延迟。但是当你像多按键一样快速按键时,原来的问题仍然存在。。i、 当蛇向下移动时,你几乎立即点击左键和上键。。蛇向上移动,但不先向左移动。。她的小提琴我试过了,推动新的关键值并改变它们,但问题仍然是一样的。假设立即按下向左键和向上键时箭头数组有{down}。。arrowArray={up}而不是arrowArray={left,up},因为setInterval几乎立即清除left。