2010-03-11 65 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); 

    } 
}