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

时间:2014-07-25 20:19:57

标签: javascript jquery loops foreach tetris

我在编写俄罗斯方块时难以抓住当前的一块。现在,当我试图移动一个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;

        }
        }

 });
}

1 个答案:

答案 0 :(得分:4)

这个问题实际上并不是真正的问题。您正在为tetromino中的每个tetrominoList分配eventlistener。所以每次按下按钮都会影响所有按钮。

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

编辑:

我看到你实际上用tetrominoID跟踪你的​​最后一个(活跃的)tetromino。因此,不要更新列表tetrominoList.foreach中的所有部分,而是删除foreach并简单地创建移动最后一部分

var tetromino = tetrominoList[tetrominoID];

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