2014-07-25 11 views
0

테트리스를 프로그래밍하면서 현재 조각을 잡는 데 어려움을 겪고 있습니다. 지금 당장 테트롬 1 개를 움직이려고하면 모두 움직입니다. 나는 잠시 동안이 문제에 갇혀 있었고, 나는 정말로 도움을주었습니다. 아래는 코드의 스 니펫이며 jsfiddle에 모든 것을 넣었습니다. http://jsfiddle.net/L5q6g/JS 테트리스의 현재 조각 이동

고맙습니다!

//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

실제로이 기능에는 문제가 없습니다. tetrominotetrominoList에 eventlistener를 할당하고 있습니다. 버튼을 누르면 언제나 모든 버튼에 영향을 미치게됩니다.

tetromino을 만들 때 이벤트 리스너를 추가 한 다음 나중에 tetrominoLand에서 수신기를 제거해보십시오.

편집 :

나는 당신이 실제로 tetrominoID와 마지막 (활성)의 Tetromino 추적을 참조하십시오. 그래서 그 대신 목록 tetrominoList.foreach의 모든 조각을 업데이트하는 foreach는 없애 단순히 당신이 현재의 Tetromino인지를 결정하려면 어떻게 마지막 조각

var tetromino = tetrominoList[tetrominoID]; 

근무 포크 http://jsfiddle.net/8pVzp/

+0

나는 이벤트 리스너가 청취해야 할 것에 고심하고있다. 지금은 forEach 함수를 사용하는 'controls'라는 함수를 청취합니다. 나는 각각이 모든 테 트로 모 노스를 움켜 잡고 있다고 생각합니다. 나는 사건 청취자가 오직 하나의 tetromino를 잡는 방법을 확신하지 못한다. 도와 주셔서 정말 고맙습니다. – aveevu

+0

foreachfunction을 제거하고 위를보십시오 – Cheruvian