0

我有一个 GRect 类型的实例变量

private GRect brick;

我通过迭代创建了几个

private void makeBrickLineX(int x, int y, Color color)
{
    for (int i = 0; i < NBRICKS_PER_ROW; i++, 
                        x += BRICK_WIDTH + BRICK_SEP)                // Sets the x locations and separation between each brick.
    {                                                
        GRect brick  = new GRect (BRICK_WIDTH, BRICK_HEIGHT);
        brick.setFilled(true);
        brick.setColor(color);
        add(brick, x,y);
    }
}

问题是,我正在创建一个“突围”游戏,我需要知道球何时击中砖块。它的代码很简单,我使用了一个名为 getElementAt (balls x & y location) 的方法,这一切都有效。但是有几块砖,并且在砖上调用 remove remove (brick)。只删除了右下角的一块砖,所以这些砖不能同名?我该怎么做才能使其适用于所有“砖”实例。

4

3 回答 3

0

您正在使用存储砖块的底层数据结构是什么?删除(砖)做什么?如果您使用的是散列数据结构,这似乎是 hashCode() 和/或 equals() 方法的问题。

于 2012-09-11T21:46:46.973 回答
0

您可以删除所有实例,GRect但您只是保留对最后一个命名实例的引用brick并将其从您的视图中删除。如果您已经将所有积木存储在一个对象中,您可以删除它们,例如在 a 的情况下,List通过给出一个数字索引:

List allBricks = getAllBricks();
int removeIndex = getIndexForRemove();
allBricks.remove(removeIndex);

与球的位置进行比较时,您如何读取积木的位置?

于 2012-09-11T23:31:02.433 回答
0

每次打电话

GRect brick = new GRect (BRICK_WIDTH, BRICK_HEIGHT)

您正在创建一个设置为新 GRect 对象的新变量“brick”。在 Java 中,每个变量都必须有一个唯一的名称,因此您不能有多个 GRect 对象,每个对象都被命名为“brick”。

为了解决这个问题,每次创建一个名为“brick”的对象时,Java 只是用名为“brick”的第二个对象覆盖之前的名为“brick”的对象。因此,变量名称“brick”仅与您创建的最终砖对象相关联。

您大概仍在使用 add() 方法将您创建的每个砖对象添加到某些数据存储中。你能告诉我们你的 add() 方法的代码吗?您的 add() 方法很可能应该将每个砖块添加到某个数据结构中,然后您可以直接从中删除所有砖块。

于 2012-09-11T21:55:17.630 回答