2017-05-18 70 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); 
}