2017-05-18 9 views
0

나는 안드로이드 스튜디오에서 브레이크 아웃 게임을 코딩하고있다. 벽돌을 배열로 설치하고 그림을 그리도록 설정했습니다. 그러나 모든 벽돌은 서로 위에 그려져 있습니다.모든 벽돌을 위에 겹쳐서 쌓아 올리는 프로젝트

BreakoutView 클래스 추출물 :

private static final int rows = 5; 
private static final int columns = 10; 
private static final int brickHeight = 50; 
private static final int brickWidth = 100; 
int brickX = 0; 
int brickY = 0; 
int brickSpaces = 0; 
private Sprite[] bricks; 

public BreakoutView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    bricks = new Sprite[rows * columns]; 
    for (Sprite brick: bricks) { 
     brick.setSize(brickWidth, brickHeight); 
     brick.setLocation(brickX, brickY); 
     brick.paint.setARGB(255,250,0,0); 
    } 
} 

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    for (Sprite brick : bricks) { 
     for (int r = 0; r <= rows; r++) { 
      brickY = brickHeight + brickSpaces; 
      for (int c = 0; c <= columns; c++) { 
       brickX = brickWidth + brickSpaces; 
       brickSpaces = 10; 
      } 
     } 
    } 
} 

Sprite 클래스 :

public class Sprite { 

    public RectF rect = new RectF(); 
    public float dx = 0; 
    public float dy = 0; 
    public Paint paint = new Paint(); 

    public Sprite(float x, float y, float width, float height) { 
     setLocation(x, y); 
     setSize(width, height); 
    } 
} 
+1

여기에 게시 코드는 어떤 스프라이트를 작성하지 않습니다. 문제가 있음을 나타내는 가장 작은 코드 블록을 게시하십시오. – Jason

답변

0

여기에 몇 가지 문제가 있습니다.

먼저 빈 배열을 만든 다음 해당 배열에있는 (존재하지 않는) 모든 객체를 반복합니다. 이 벽돌 개체 자체의 x와 y를 업데이트하지 않습니다

for (Sprite brick : bricks) { 
    for (int r = 0; r <= rows; r++) { 
     brickY = brickHeight + brickSpaces; 
     for (int c = 0; c <= columns; c++) { 
      brickX = brickWidth + brickSpaces; 
      brickSpaces = 10; 
     } 
    } 
} 

... 것을 제외 : 당신은 벽돌이 갈 곳이 코드 제어하려는처럼

둘째, 그것은 보인다. 아마도 brick.setLocation(brickX, brickY)에 깜빡하신 것입니까?

또한 모든 벽돌의 모든 위치를 반복합니다. 이는 모든 벽돌이 루프가 생성 한 마지막 위치를 얻음을 의미합니다.

루프는 아마 이런 식으로 작동합니다 :

for (Sprite brick : bricks) { 
    // work out where this particular brick goes (rather than loop through them all) 
    brickX = ?; 
    brickY = ?; 

    // set the location into the sprite 
    brick.setLocation(brickX, brickY); 
}