0

テトリスをプログラミングしているときに、現在のピースをつかむのに苦労しています。今、テトロミノを1つ動かそうとすると全部動いてしまう。私はしばらくこの問題で立ち往生しており、助けていただければ幸いです。以下はコードのスニペットで、すべてを 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

問題は実際にはこの関数にはありません。tetrominoのすべてにイベントリスナーを割り当てていtetrominoListます。したがって、ボタンを押すたびに、それらすべてに影響します。

代わりに、 の作成時にイベント リスナを追加し、tetromino後で のリスナを削除してみてtetrominoLandください。

編集:

実際に最後の (アクティブな) テトロミノを で追跡しているようtetrominoIDです。したがって、リスト内のすべての部分を更新する代わりにtetrominoList.foreach、 foreach を取り除き、最後の部分を移動するだけです

var tetromino = tetrominoList[tetrominoID];

ワーキングフォークhttp://jsfiddle.net/8pVzp/

于 2014-07-25T20:35:01.747 に答える