2017-05-18 69 views
0

我在android studio中编写了一个突破游戏。我已经在一个阵列中设置了砖块,并将它们设置成了彩绘。但是,所有的砖块都是彼此重叠的。将所有砖块互相重叠的突破项目

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

有几个问题在这里。

首先,您正在创建一个空数组,然后遍历该数组中所有(不存在的)对象。

其次,它看起来像你想这个代码,以控制那里的砖块去:

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; 
     } 
    } 
} 

...但它不会更新在砖对象本身x和y。也许你忘了拨打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); 
}