0

我做了一个蛇游戏,但是当我向右走并同时单击向下和向左时,它会认为它与自身相撞并死亡。

事件的代码是:

$(document).keydown(function(e){

var key = e.which;

if(key == "37" && dir!= "right") dir = "left";
else if (key == "38" && dir != "down") dir = "up";
else if (key == "39" && dir != "left") dir = "right";
else if (key == "40" && dir != "up") dir = "down";



})

我在每 60 毫秒重新绘制一次的绘制方法中有这段代码

var headX = snakeArray[0].x;
var headY = snakeArray[0].y;

//directions
if (dir == "right") headX++;
else if (dir == "left") headX--;
if(dir =="up") headY--;
else if (dir == "down") headY++;


//game over clause
if (headX == -1 || headX == w/cellSize || headY == -1 || headY == h/cellSize ||     CheckCollision(headX,headY, snakeArray))
{
//restart game
init();
return;
}

自己测试游戏: http ://www.taffatech.com/Snake.html

4

1 回答 1

0

那不是错误。

每帧之间的时间步长是如此之大,以至于您可以轻松地在一帧内生成两个 keydown 函数调用。

-> 这会导致您的蛇首先(例如)向右移动,然后获得“向下”按键,将其方向更改为“向下”,然后在移动之前获得“向左”按键。因此,您的蛇在一帧内“转了 180 度”,并从字面上吃掉了自己。

您应该确保在一帧中只接受一个新方向,并且(为了更好地玩游戏)排队其他按下的键以计算它们在接下来的帧中的影响。

于 2013-05-29T21:26:43.057 回答