Jquery 帆布蛇虫事件

Jquery 帆布蛇虫事件,jquery,canvas,Jquery,Canvas,我做了一个蛇的游戏,但是当我向右走,同时点击左下和右下的时候,我想它会和自己碰撞而死亡 事件的代码为: $(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" &&

我做了一个蛇的游戏,但是当我向右走,同时点击左下和右下的时候,我想它会和自己碰撞而死亡

事件的代码为:

$(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";



})
我在一个paint方法中有这个代码,它每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;
}
要亲自测试游戏,请执行以下操作: 这不是错误

每帧之间的时间步长非常大,因此您可以在一帧内轻松生成两个keydown函数调用

->这会导致你的蛇先向右移动,然后按下“向下”键,将方向改为“向下”,然后在移动之前按下“向左”键。因此,你的蛇在一个画面中“旋转180度”,并真的吃掉了自己


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

您知道最好的方法是什么吗?我将列出一个名为“keyqueue”的列表或者其他什么东西,每次按下按钮时都会附加一个保持按下方向的元素。然后,在每个renderstep中,我都会从列表中释放第一个元素(如果列表不是空的),并使用它执行您在keypress函数中执行的操作。仅此而已。谢谢,我没有按照你说的做,而是使用了一个变量布尔值,它是false或true,基于是否可以移动,并且每帧仅允许1个移动。谢谢,这很有效!但是你应该记住,有些玩家在很短的时间内按下了很多按钮,特别是当蛇已经很长的时候。然后每个按键都必须使用,不能像现在这样简单地“擦除”。如果你想要一个真正可玩的游戏,请排队按按钮:但当蛇速度慢时,这不会导致错误,比如如果人们快速按下加载按钮,那么蛇就会表现得像自动驾驶仪一样?自己移动到自己的眼睛里?