我不明白为什么会这样:
我有一个传递给标签对象的整数:
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);
那里删除文本,所以下一个文本不会与旧文本重叠,但由于某种原因这不起作用。
这些数字堆叠在彼此之上。那是为什么?
答案 0 :(得分: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));
}
}
答案 1 :(得分:2)
您remove
新字符串 - 尚不存在 - 旧 !即,你第二次remove
“2” - 但没有这样的字符串(第一次你有add
ed“3”,不“2”!),所以没有效果。你需要记住你添加的前一个字符串,如果有的话,例如在私有成员变量中,在添加新字符串之前删除 一个字符串!
答案 2 :(得分:0)
我很难绕过Justin 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);
}
}