我有一个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(球x和y位置)的方法,这一切都有效。但是有几块砖块,并在砖remove (brick)
上调用删除。只删除最右下角的一块砖,所以这些砖块不能共用同一个名称?我该怎么做才能使它适用于所有“砖块”实例。
答案 0 :(得分:0)
您使用存储砖的底层数据结构是什么?删除(砖)做什么?如果您使用散列数据结构,似乎是hashCode()和/或equals()方法的问题。
答案 1 :(得分:0)
每次致电
GRect brick = new GRect (BRICK_WIDTH, BRICK_HEIGHT)
你正在创建一个新的变量'brick',它被设置为一个新的GRect对象。在Java中,每个变量必须具有唯一的名称,因此您不能拥有多个名为“brick”的GRect对象。
为了解决这个问题,每次创建一个名为“brick”的对象时,Java都会用第二个名为“brick”的对象覆盖名为“brick”的上一个对象。因此,变量名称“brick”仅与您创建的最终砖块对象相关联。
您可能仍在使用add()方法将您创建的每个砖块对象添加到某些数据存储中。你能告诉我们你的add()方法的代码吗?你的add()方法最有可能将每个砖块添加到某个数据结构中,然后你可以通过它直接删除所有砖块。
答案 2 :(得分:0)
您可以删除GRect
的所有实例,但您只是保留对名为brick
的最后一个实例的引用,并将其从视图中删除。如果您已经将所有砖块都存储在对象中,则可以删除它们,例如在List
的情况下通过给出数字索引来删除它们:
List allBricks = getAllBricks();
int removeIndex = getIndexForRemove();
allBricks.remove(removeIndex);
在与球的位置进行比较时,您如何阅读砖块的位置?