2014-03-25 4 views
2

JavaScript로 테트로 미노를 그리려고하고 있는데 문제가 있습니다. 내가 가진 코드는 this.blocks = i.blocks [b] [c]가 잘못되었다고 생각하지만, 더 많을 수도 있습니다. 이제 내 눈이 아플 것 같아서 도움을 청하기로 결정했습니다. this.blocks = i.blocks [b] this.blocks가 배열을 저장할 수 없기 때문에 [c] 작동하지 않습니까? 아니면 또 다른 문제가 있습니다. 도와 줘서 고마워.JavaScript 테트리스에서 새로운 tetrominos 그리기

var canvas = document.getElementById("canvas"); 
     var ctx = canvas.getContext("2d"); 
     canvas.height = window.innerHeight; 
     canvas.width = window.innerWidth; 
     var h = canvas.height; 
     var w = canvas.width; 
     var gridWidth = w/4; 
     var gridHeight = h; 
     var cols = gridWidth/10; //width, columns 
     var rows = cols; //height, rows 
     window.addEventListener("keydown", test, true); 
     var b = 0; 
     var c = 0; 

    var gravity = 0; 

    var id; 
    var type = 2; 
    var color; 
    var x = gridWidth * 2; 
    var y = -30; 
    var position; 
    var velocityY; 
    var tetrominoId = 0; 
    var i = { id: 'i', size: 4, 
       blocks: [[0, 1, 0, 0], 
       [0, 1, 0, 0], 
       [0, 1, 0, 0], 
       [0, 1, 0, 0]], 
       color: 'cyan' }; 

function tetromino(id, type, color, position, y, velocityY){ 
    this.id = i.id; 
    this.blocks = i.blocks[b][c]; 
    this.color = i.color; 
    this.x = x; 
    this.y = y; 
    this.velocityY = 1; 
} 

var tetrominoList = []; 

function addTetromino(type, color, position, x, y, velocityY){ 
tetrominoList[tetrominoId] = new tetromino(tetrominoId, type, color, x, y, velocityY); 
tetrominoId++; 

} 

function tetrominoDraw(){ 

     tetrominoList.forEach(function(tetromino){ 

     for(b = 0; b < 4; b++){ 

      for(c = 0; c < 4; c++){ 



        ctx.fillStyle = tetromino.color; 
        ctx.fillRect(
         gridWidth * 2 + tetromino.blocks[b][c] * 
         b * cols, tetromino.blocks[b][c] * c * rows + gravity + y, 
         cols, rows 
         ); 
        ctx.fill(); 
       } 
      } 
     } 
     }); 

     } 

감사합니다 : http://jsfiddle.net/8aS9E/

여기에 코드입니다 :

다음은 jsfiddle 링크입니다!

답변

1

tetromino.blocks는 i.blocks (i.blocks [0] [0]의 첫 번째 배열의 첫 번째 요소 값과 같기 때문에 b와 c 변수가 모두 초기화시 0으로 정의).

당신의 Tetromino 선언에서 배열 주소를 제거하기 만하면됩니다 : http://jsfiddle.net/8aS9E/1/

:

function tetromino(id, type, color, position, y, velocityY) { 
    this.id = i.id; 
    this.blocks = i.blocks; 
    this.color = i.color; 
    this.x = x; 
    this.y = y; 
    this.velocityY = 1; 
} 

나는 당신의 바이올린 업데이트되었습니다