It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center。
7年前关闭。
我这里有我的俄罗斯方块项目的代码片段。
顺便说一句,类
?或者是因为
这是错误的;删除它并取消注释上面的行,该行将在现有文本字段上设置文本。
此外,您还具有以下代码:
显然,这将用游戏分数覆盖您的
设计中还有另一件事是错误的:
您正在启动另一个线程来控制游戏玩法。您不得在主GUI线程(所谓的事件调度线程(EDT))之外更新任何Swing组件。我的建议是重新设计代码,类似于使用
与这个问题的问题没有直接关系,但是这段代码
这也是错误的:它不会写入实例变量
7年前关闭。
我这里有我的俄罗斯方块项目的代码片段。
private class Game implements Runnable {
private int numDropped = -1;
public void setCount(int count){
count++;
}
public int getCount(){
return count;
}
public void run() {
int column = 4, style = Piece.SHAPES[(int) (Math.random() * 7)][(int) (Math.random() * 4)];
while (onPlay) {
if (piece != null) {
if (piece.isAlive()) {
try {
Thread.currentThread().sleep(100);
}
catch (InterruptedException ie) {
ie.printStackTrace();
}
continue;
}
}
checkFullLine();
if (isGameOver()) {
playItem.setEnabled(true);
pauseItem.setEnabled(true);
resumeItem.setEnabled(false);
rightPanel.setPlayButtonEnable(true);
rightPanel.setPauseButtonLabel(true);
displayGameOver();
return;
}
piece = new Piece(style, -1, column, board);
piece.start();
style = Piece.SHAPES[(int) (Math.random() * 7)][(int) (Math.random() * 4)];
rightPanel.setTipStyle(style);
numDropped = numDropped+1;
RightPanel.scoreTextField.setText(numDropped+"");
}
}
}
顺便说一句,类
Game
是一个内部类。每当新的片段下降时,numDropped
的值都会递增(如JTextField中显示的那样),但不久后会返回零。我放错了地方吗numDropped = numDropped+1;
RightPanel.scoreTextField.setText(numDropped+"");
?或者是因为
static
之类的东西。请帮我。我是Java的新手。非常感谢你! 最佳答案
您发布的代码绝对不会将scoreTextField
更新为小于先前使用的值的值。
我首先想到的是,还有其他一些代码将scoreTextField
更新为不等于numDropped
的值。
更新资料
在您另外发布的代码中,我看到以下内容:
RightPanel.scoreTextField = new JTextField(numDropped+"");
这是错误的;删除它并取消注释上面的行,该行将在现有文本字段上设置文本。
此外,您还具有以下代码:
timer = new Timer(
500, new ActionListener() {
public void actionPerformed(ActionEvent ae) {
scoreTextField.setText("" + game.getScore());
int scoreForLevelUpdate = game.getScoreForLevelUpdate();
if (scoreForLevelUpdate >= Tetris.PER_LEVEL_SCORE && scoreForLevelUpdate > 0)
game.levelUpdate();
}
}
);
timer.start();
显然,这将用游戏分数覆盖您的
scoreTextField
,而在Game
的循环中,您正在编写放置元素的数量。从变量scoreTextField
的名称来看,应更改Game
中的代码以更新其他一些文本字段,而不是用于显示分数的文本字段。设计中还有另一件事是错误的:
Thread thread = new Thread(new Game());
thread.start();
您正在启动另一个线程来控制游戏玩法。您不得在主GUI线程(所谓的事件调度线程(EDT))之外更新任何Swing组件。我的建议是重新设计代码,类似于使用
timer
变量进行的操作:不要启动另一个线程;而是以100毫秒的间隔安排另一个Timer
,并根据您在actionPerformed
中的当前代码实现相关的while (onPlay)
-您需要更改的只是不再需要循环。当然,Thread.sleep(100)
也将是多余的。游戏结束后,只需cancel
您的计时器任务即可。与这个问题的问题没有直接关系,但是这段代码
public void setCount(int count){
count++;
}
这也是错误的:它不会写入实例变量
count
,而只是增加所提供的参数,并立即将其丢弃(这只是一个局部变量)。关于java - 值增加,但立即返回零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12820464/
10-11 01:01