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

精灵类:

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

1 回答 1

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);
}
于 2017-05-18T22:38:13.880 回答