我在编写俄罗斯方块时难以抓住当前的一块。现在,当我试图移动一个tetromino时,所有这些都移动了。我一直坚持这个问题,我真的很感激一些帮助。下面是代码片段,我将整个事情放在jsfiddle上。 http://jsfiddle.net/L5q6g/
谢谢!
//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;
}
}
});
}
答案 0 :(得分:4)
这个问题实际上并不是真正的问题。您正在为tetromino
中的每个tetrominoList
分配eventlistener。所以每次按下按钮都会影响所有按钮。
相反,您可以尝试在创建tetromino
时添加事件侦听器,然后在tetrominoLand
上删除侦听器。
编辑:
我看到你实际上用tetrominoID
跟踪你的最后一个(活跃的)tetromino。因此,不要更新列表tetrominoList.foreach
中的所有部分,而是删除foreach并简单地创建移动最后一部分
var tetromino = tetrominoList[tetrominoID];