Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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 在JS俄罗斯方块中移动当前片段_Javascript_Jquery_Loops_Foreach_Tetris - Fatal编程技术网

Javascript 在JS俄罗斯方块中移动当前片段

Javascript 在JS俄罗斯方块中移动当前片段,javascript,jquery,loops,foreach,tetris,Javascript,Jquery,Loops,Foreach,Tetris,在编写俄罗斯方块时,我很难抓住当前的片段。现在,当我试着移动一个提特罗米诺时,他们都移动了。我在这个问题上已经纠结了一段时间,我真的很感谢你的帮助。下面是一段代码,我将全部内容放在JSFIDLE上 谢谢大家! //CONTROLS function controls(e){ tetrominoList.forEach(function(tetromino){ //RIGHT if(e.keyCode == 39){ e.preventDefault(); if(te

在编写俄罗斯方块时,我很难抓住当前的片段。现在,当我试着移动一个提特罗米诺时,他们都移动了。我在这个问题上已经纠结了一段时间,我真的很感谢你的帮助。下面是一段代码,我将全部内容放在JSFIDLE上

谢谢大家!

//CONTROLS

function controls(e){
tetrominoList.forEach(function(tetromino){

//RIGHT
if(e.keyCode == 39){
    e.preventDefault(); 
        if(tetromino.gravity < 500 - 4*rows && tetromino.x < 3*cols){

                tetromino.x += cols;

    console.log(tetromino.gravity);

        }
    }

//LEFT
if(e.keyCode == 37){
    e.preventDefault(); 
        if(tetromino.gravity < 500 -4*rows&& tetromino.x > -6*cols){
        tetromino.x -= cols;

        }
        }
//DOWN  
if(e.keyCode == 40){
    e.preventDefault(); 
        if(tetromino.gravity < 500 - 4*rows){
        tetromino.gravity += rows;

        }
        }
    });

//CRASH

if(e.keyCode == 32){
    e.preventDefault(); 
        if(tetromino.gravity < 500 - 4*rows){
        tetromino.gravity +=500;

        }
        }

 });
}
//控件
功能控制(e){
tetrominoList.forEach(函数(tetromino){
//对
如果(e.keyCode==39){
e、 预防默认值();
if(tetromino.gravity<500-4*行和&tetromino.x<3*列){
tetromino.x+=cols;
控制台日志(tetromino.gravity);
}
}
//左
如果(e.keyCode==37){
e、 预防默认值();
if(tetromino.gravity<500-4*行和&tetromino.x>-6*列){
tetromino.x-=cols;
}
}
//向下
如果(e.keyCode==40){
e、 预防默认值();
如果(tetromino.gravity<500-4*行){
tetromino.gravity+=行;
}
}
});
//撞车
如果(e.keyCode==32){
e、 预防默认值();
如果(tetromino.gravity<500-4*行){
tetromino.重力+=500;
}
}
});
}

问题实际上并不在这个函数中。您正在将eventlistener分配给
tetromino列表
中的每个
tetromino
。所以,任何时候你按下一个按钮,它都会影响到所有人

相反,您可以在创建
tetromino
时尝试添加事件侦听器,然后在
tetromino
上删除侦听器

编辑:

我看到你用
tetrominoID
跟踪你最后一次(活动)的tetromino。因此,与其更新列表中的所有片段
tetrominoList.foreach
,不如去掉foreach,只创建并移动最后一个片段

var tetromino = tetrominoList[tetrominoID];

工作叉

问题实际上并不在这个函数中。您正在将eventlistener分配给
tetromino列表
中的每个
tetromino
。所以,任何时候你按下一个按钮,它都会影响到所有人

相反,您可以在创建
tetromino
时尝试添加事件侦听器,然后在
tetromino
上删除侦听器

编辑:

我看到你用
tetrominoID
跟踪你最后一次(活动)的tetromino。因此,与其更新列表中的所有片段
tetrominoList.foreach
,不如去掉foreach,只创建并移动最后一个片段

var tetromino = tetrominoList[tetrominoID];

Working fork

如何确定哪一个是您当前的tetromino?如何确定哪一个是您当前的tetromino?我正在努力解决事件侦听器应该听什么。现在,它侦听一个名为“controls”的函数,该函数使用forEach函数。我想forEach抓住了所有的tetrominos。我不知道如何使事件侦听器只捕获一个tetromino。我真的很感谢你的帮助。摆脱你的foreachfunction,看看上面我正在努力让事件侦听器听什么。现在,它侦听一个名为“controls”的函数,该函数使用forEach函数。我想forEach抓住了所有的tetrominos。我不知道如何使事件侦听器只捕获一个tetromino。我真的很感谢你的帮助。去掉你的foreachfunction,看看上面