我正在用 Java 编写一个简单的皮卡丘游戏,我使用 swing.Timer 和 JProgress Bar,我的代码是这样的:
public static void TimeBarListener(final View scr){
ActionListener updateProBar = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
int val = scr.timeBar.getValue();
if (val <= 0) {
scr.gameOver();
scr.timer = null;
return;
}
scr.timeBar.setValue(--val);
}
};
int t = n*400;
scr.timer = new Timer(t, updateProBar);
}
这里的“src”是一个扩展JFrame的类来显示我写的游戏,“n”是一个级别的皮卡丘块数。它工作得很好,但是在我添加“计时器”之后,出现了很多问题:
我将变量“t”设置为按级别更改,但似乎不起作用(我测试了该值,它是正确的值,但似乎“计时器”无法获得它)。时间用得太快了,如果我点击更多的碎片,时间会更快,即使我设置得更长,它也没有改变任何东西。
当我第二次点击“新游戏”时,计时器跑得更快了。但是如果我关闭程序然后再次运行,时间就会恢复正常。
如果时间用完,然后我再次单击“新游戏”按钮,它会出现 1 秒钟,然后返回“游戏结束屏幕”。有时它可以工作,但会出现“IndexArrayOutOfBounds”Ecception。
我想使用“暂停”按钮,这意味着计时器也必须暂停然后继续运行。无论如何我可以做到吗?
我想我的问题是基于代码
if (val <= 0) {
scr.gameOver();
scr.timer = null;
return;
}
如果计时器用完,则会出现 Game Over 屏幕。但是我对此很陌生,我无法理解我是如何工作的,所以我自己想不出任何解决方案,或者也许这不是问题。
希望我能从你们那里得到一些帮助。非常感谢 :)