Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 为什么不’;我的数组值是否反映了我在屏幕上看到的内容?_Javascript_Arrays - Fatal编程技术网

Javascript 为什么不’;我的数组值是否反映了我在屏幕上看到的内容?

Javascript 为什么不’;我的数组值是否反映了我在屏幕上看到的内容?,javascript,arrays,Javascript,Arrays,我正在做一个蛇游戏。当我的蛇“吃”一块蓝色食物时,我会在它的尾巴上再加一块。但是,当我在console.log中记录snake数组时,我看不到每个snake片段的单独数据属性。我只看到根据蛇的当前长度复制的蛇头位置 发生这种情况是因为使蛇移动的setInterval太短了吗?蛇的移动速度是否如此之快,以至于当console.log发生时,每一条蛇都会穿过头部移动的地方?或者我在屏幕上看到的东西和蛇阵的位置有延迟吗如何修复代码,以便获得snake数组中每个片段的准确值?我希望阵列反映我在屏幕上看到

我正在做一个蛇游戏。当我的蛇“吃”一块蓝色食物时,我会在它的尾巴上再加一块。但是,当我在console.log中记录snake数组时,我看不到每个snake片段的单独数据属性。我只看到根据蛇的当前长度复制的蛇头位置

发生这种情况是因为使蛇移动的setInterval太短了吗?蛇的移动速度是否如此之快,以至于当console.log发生时,每一条蛇都会穿过头部移动的地方?或者我在屏幕上看到的东西和蛇阵的位置有延迟吗如何修复代码,以便获得snake数组中每个片段的准确值?我希望阵列反映我在屏幕上看到的内容。

如果按shift键,snake将暂停,但console.log仍不会显示正确的值。箭头键控制着蛇的动作。首先单击网格开始播放

//在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”。太棒了。再次感谢!