Javascript 为什么不’;我的数组值是否反映了我在屏幕上看到的内容?
我正在做一个蛇游戏。当我的蛇“吃”一块蓝色食物时,我会在它的尾巴上再加一块。但是,当我在console.log中记录snake数组时,我看不到每个snake片段的单独数据属性。我只看到根据蛇的当前长度复制的蛇头位置 发生这种情况是因为使蛇移动的setInterval太短了吗?蛇的移动速度是否如此之快,以至于当console.log发生时,每一条蛇都会穿过头部移动的地方?或者我在屏幕上看到的东西和蛇阵的位置有延迟吗如何修复代码,以便获得snake数组中每个片段的准确值?我希望阵列反映我在屏幕上看到的内容。 如果按shift键,snake将暂停,但console.log仍不会显示正确的值。箭头键控制着蛇的动作。首先单击网格开始播放Javascript 为什么不’;我的数组值是否反映了我在屏幕上看到的内容?,javascript,arrays,Javascript,Arrays,我正在做一个蛇游戏。当我的蛇“吃”一块蓝色食物时,我会在它的尾巴上再加一块。但是,当我在console.log中记录snake数组时,我看不到每个snake片段的单独数据属性。我只看到根据蛇的当前长度复制的蛇头位置 发生这种情况是因为使蛇移动的setInterval太短了吗?蛇的移动速度是否如此之快,以至于当console.log发生时,每一条蛇都会穿过头部移动的地方?或者我在屏幕上看到的东西和蛇阵的位置有延迟吗如何修复代码,以便获得snake数组中每个片段的准确值?我希望阵列反映我在屏幕上看到
//在moveSnake函数中,我必须使用下面链接中的代码来忽略多个按键事件。
//https://stackoverflow.com/questions/9098901/how-to-disable-repetitive-keydown-in-jquery
$(文档).ready(函数(){
makebox();
addSnake();
moveSnake();
添加食物();
杀人蛇();
addToSnake();
});
函数makebox(){
var size=24;//24
var boxSize=12;//12
对于(i=1;iwelll..我设法以某种方式修复了这个游戏,主要通过做两件事:
- 拆分删除最后一个磁贴&通过更新snake索引(数组中的值)添加第一个磁贴。除了数组值之外,您的代码中还有bug,它们是通过这种方式修复的
- 添加一个变量,该变量会记住蛇所处的最后一个字段,并在蛇吃东西时使用该变量添加平铺。这是解决问题的主要方法,与前面一样,您基本上是在数组中复制值,但这只是一个错误(坏循环)
所以,现在它应该像预期的那样工作,buuuut
在游戏中使用jquery是对上帝的亵渎,与香草相比,它的性能非常糟糕,并且不会以任何可能的方式帮助您
移动和更新应该发生在1个间隔/帧循环内,而不是4个循环内,这是违反DRY规则的严重罪行
使用二维数组可能会更容易
还有其他几个
//在moveSnake函数中,我必须使用下面链接中的代码来忽略多个按键事件。
//https://stackoverflow.com/questions/9098901/how-to-disable-repetitive-keydown-in-jquery
$(文档).ready(函数(){
makebox();
addSnake();
moveSnake();
添加食物();
杀人蛇();
addToSnake();
});
var-previousSnake=null;
函数makebox(){
var size=24;//24
var boxSize=12;//12
对于(i=1;i{
var tmpPrev=prevNum;
prevNum=n;
返回tmpPrev
})
}
$('*[data=“'+snake[0]+'“]”)addClass(“悬停”);
var-down={};
removeExtra=函数(){
var数组=[];
$(“.hover”).each(函数(){
array.push($(this.attr(“data”));
});
var len=array.length
变量len2=snake.length-1
变量组合=len-len2
//为了(var i=0;我非常感谢你的帮助!我知道我的代码有很多错误。我想如果我能解决这个数组问题,那么我就可以开始解决其他一些问题。我非常感谢你的帮助和建议!如果你有机会,你能告诉我你的updateSnakeNumbers函数中发生了什么吗?我一直在寻找在这上面花了2天的时间,我仍然不认为我可以解释它到底在做什么。下面是代码的一个例子,根据你的答案做了一些修改。好的:我们将预先计算的数字作为头的0索引传递。然后snake=snake.map()允许用新数组覆盖“snake”,新数组是从数组“snake”中的每个项创建的。我们的想法是将数字从蛇的头部移动到后部。第一个项目(头部)由param提供,最后一个项目不会被使用,因为蛇的最后一部分每次都会消失。因此,在.map循环中,我们得到当前值,稍后记住它(prevNum),并在其位置插入上一个“prevNum”。太棒了。再次感谢!