0

在编写俄罗斯方块时,我无法抓取当前的作品。现在,当我试图移动一个四联牌时,它们都在移动。我已经被这个问题困住了一段时间,我真的很感激一些帮助。下面是一段代码,我把整个东西放在了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;

        }
        }

 });
}
4

1 回答 1

4

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

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

编辑:

我看到您实际上使用tetrominoID. 因此,不要更新列表中的所有部分,而是tetrominoList.foreach摆脱 foreach 并简单地创建移动最后一个部分

var tetromino = tetrominoList[tetrominoID];

工作叉http://jsfiddle.net/8pVzp/

于 2014-07-25T20:35:01.747 回答