2017-05-18 4 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

いくつかの問題がここにあります。

まず、空の配列を作成してから、その配列のすべての(存在しない)オブジェクトをループします。

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); 
} 
関連する問題