【发布时间】:2013-05-15 13:37:59
【问题描述】:
我正在用 Java 制作俄罗斯方块,并希望在左侧进行游戏,在右侧显示得分、按钮和 nextPiece,如下所示:
您会注意到游戏面板上的分数正在更新,但分数面板(右侧)上的分数没有。
在游戏面板上,我有分数和级别的全局变量:private int level, totalScore;,它们被初始化为 0。
这在我的paint component():
g.setColor(Color.RED);
g.drawString("Level: " + level, this.getWidth()/2+110, this.getHeight()/2-200);
g.drawString("Score: " + totalScore, this.getWidth()/2+110, this.getHeight()/2-170);
然后我在游戏面板中有这段代码,用于计算等级和得分:
public void changeLevel () {
int max = (level+1)*100;
if (totalScore >= max) {
System.out.println(max + "reached... next level");
level++;
totalScore = 0;
timer();
}
}
public int tallyScore(int totalLines) {
int score = 0;
switch (totalLines) {
case 1: score = 40 * (level + 1);
break;
case 2: score = 100 * (level + 1);
break;
case 3: score = 300 * (level + 1);
break;
case 4: score = 1200 * (level + 1);
break;
default: break;
}
return score;
}
//loop through all rows starting at bottom (12 rows)
public void checkBottomFull() {
int lines = 0;
for(int row = totalRows-1; row > 0; row--) {
while (isFull(row)) {
lines++;
clearRow(row);
}
}
totalScore += tallyScore(lines);
//check if level needs to be changed based on current score...
changeLevel();
//reset lines after score has been incremented
lines=0;
}
因为我希望分数面板显示分数,所以我在游戏面板中有这两个方法返回全局变量:
public int getScore() {
return totalScore;
}
public int getLevel() {
return level;
}
在我的分数面板paintComponent() 我有board.getLevel() 和board.getScore()(board 类是游戏面板),所以我可以将游戏面板分数提供给分数面板。
g.setColor(Color.BLACK);
g.drawString("Level: " + board.getLevel(), this.getWidth()/2, this.getHeight()/2-130);
g.drawString("Score: " + board.getScore(), this.getWidth()/2, this.getHeight()/2-100);
但从图片中可以看出,这些分数并未更新。
有什么想法吗?
谢谢!
【问题讨论】:
-
似乎你让你的生活变得更加艰难,而不是必须的。您可以使用侦听器接口,而不是搞乱全局变量。
-
为了尽快获得更好的帮助,发布一个.. 哦,何必呢?上次你没理我。我会投票结束。
-
@AndrewThompson 我没有忽略你……我发布了 SSCCE,但做得不太对……也许即使在阅读了你的内容之后,我也不知道如何发布 SSCCE为我链接。
-
您是否在主游戏循环中调用分数面板的
paintComponent()方法? -
不,我想做的是绘制两个单独的面板,所以它们都有自己的
paintComponent()方法。
标签: java swing jpanel paintcomponent