1

我正在尝试使用 Javascipt 构建 HTML5 蛇游戏。我有一个主要问题需要解决,经过数小时的思考后无法解决。

这与 setInterval 和箭头键按下时的蛇运动有关。当快速按下箭头键时..几乎就像按下多个键一样游戏结束(它意味着当蛇跑过自己时结束)

解释该问题的工作模型:http: //jsfiddle.net/MgsZp/29/

情况:蛇正在向下移动,当我快速按下左键然后向上箭头时,蛇会越过自身(仅向上移动),因为左箭头的时间间隔立即被清除。相反,它应该向左然后向上移动。

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

例子:

var 箭头数组 = [] ; /* 存储按下的箭头键 */

// 按键 setInterval(move_snake, timer) 的方向存储在 arrowArray[0]

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

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

帮助?

4

2 回答 2

1

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

于 2012-07-23T17:06:05.783 回答
1

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

于 2012-07-23T17:01:53.473 回答