2012-09-11 98 views
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(球x & y位置)的方法,這一切都有效。但有幾塊磚,並呼籲刪除磚remove (brick)。只刪除最右下角的一塊磚,所以這些磚塊不能共用同一個名稱?我可以做些什麼來使它適用於所有「磚塊」實例。

+0

你應該展示更多的代碼,例如,這個「添加」方法如何存儲磚塊? 'getElementAt()'函數是如何工作的,你確定刪除是正確的嗎? – kurtzbot

+0

這是不清楚的......什麼是'刪除(磚)'和'添加(磚,x,y)'? – Flavio

+0

我是否認爲'add(brick ...)'簡單地畫磚?它似乎沒有將每塊磚存儲在任何一種數組/列表/容器中。 – twalberg

回答

0

你正在使用商店磚塊的底層數據結構是什麼?刪除(磚)有什麼作用?如果您使用散列數據結構,則看起來像是使用hashCode()和/或equals()方法的問題。

0

每次調用

GRect brick = new GRect (BRICK_WIDTH, BRICK_HEIGHT) 

要創建一個新的變量「磚」時設置一個新的GRect對象。在Java中,每個變量都必須具有唯一的名稱,因此不能有多個名爲'brick'的GRect對象。

爲了解決這個問題,每次創建一個名爲'brick'的對象時,Java只是用名爲'brick'的第二個對象覆蓋前一個名爲'brick'的對象。所以變量名'磚'只與您創建的最終磚對象相關聯。

您可能仍在使用add()方法將您創建的每個brick對象添加到某些數據存儲中。你能告訴我們你的add()方法的代碼嗎?你的add()方法應該很可能將每個磚塊添加到某個數據結構中,然後你可以直接從中刪除所有的磚塊。

0

您可以刪除GRect的所有實例,但只保留對最後一個名爲brick的實例的引用並將其從視圖中刪除。

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

對進行比較時,你怎麼看磚的位置:如果您已經存儲了所有的磚塊中的對象已經,您可以通過給數字索引中刪除,例如像在List的情況下,球的位置?