2010-03-11 58 views
0

我不明白爲什麼會這樣:意外的行爲在循環打印字符串

我有一個整數傳遞給標籤對象:

int NTURNS = 3;  
for (int i = NTURNS; i > 0; i--){ 
printTurns(i); 
buildBall(); 
} 

和printTurns是這樣的:

private void printTurns(int i){ 

GLabel turns = new GLabel("" + i); 
    remove(turns);  
add(turns, (WIDTH - PADDLE_WIDTH), (BRICK_Y_OFFSET/2));   
} 

這將打印頂部遊戲中左轉的圈數。我有remove(turns);那裏刪除文本,以便下一個文本不會重疊舊的,但這是不工作的原因。

數字堆疊在彼此之上。這是爲什麼?

回答

3

你有一點GLabel問題在那裏。您正在爲循環中的每次迭代創建新的GLabel

您應該創建一個GLabel,將它添加到窗體中,然後調用GLabel.setLabel()來更改循環的每次迭代的文本。這應該能讓你省下一些頭痛的問題。

某處在您的應用程序的形式初始化(​​也許構造器):

public class MyForm : GCanvas 
{ 
    private GLabel _turns = new GLabel(); 

    public MyForm() 
    { 
     add(_turns); 
    } 

    private void printTurns(int i) 
    { 
     _turns.setLabel("" + i); 
     _turns.setLocation(WIDTH - PADDLE_WIDTH), (BRICK_Y_OFFSET/2)); 
    } 
} 
2

remove荷蘭國際集團的字符串 - 這是現在還沒有 - 一個!也就是說,第二次在你身邊是「2」 - 但沒有這樣的字符串(因爲你第一次有add ed「3」,而不是「2」!),所以沒有效果。您需要記住您添加的以前的字符串(如果有的話),例如在一個私有成員變量中,並刪除之前添加一個字符串!

0

我有一個很難包裝我身邊賈斯汀Niessner的答案頭,因爲我還是新來構造......但它確實把我引向一種爲我工作的方法。我在回答我的問題,但我會將他的回答標記爲正確的:

private void setupGame(){ 

    GLabel turns = new GLabel(""); 
    add(turns, (WIDTH - PADDLE_WIDTH), (BRICK_Y_OFFSET/2)); 
    for (int i = NTURNS; i > 0; i--){ 
    turns.setLabel("" + i); 

    } 
}