我在做蛇游戏,我遇到了一个错误。
我尝试了两个不同的循环:thread.sleep和Timer.schedule。
我也遇到了同样的问题。
它将工作良好,但在随机间隔,它将开始跳过每其他帧6-10帧。
如果我不清楚,1帧是
@Override public void paintComponent(Graphics G){...}被召唤。(我也试过油漆)
这已经发生在其他一些游戏中,但不是全部。我能做些什么来解决这个问题?
下面是代码的完整副本:https://github.com/jnmcd/Snake/blob/master/Code.java
编辑:我做了一些调试。看来这不是油漆的问题。JPanel并不总是更新。我能做些什么来解决这个问题?
发布于 2015-06-29 19:54:26
我找到了我需要做的。我不得不在重新油漆()之后添加一个revaidate()。
发布于 2015-06-29 20:00:36
同样,在checkKillCollisions中,您必须在找到失败条件后立即中断循环。
另外,如果游戏结束,它会继续显示错误messageDialog,我没有end.So,我创建了一个标志gameOver来检查游戏是否在Snake类中结束
static Boolean gameOver = false;//Defined in Snake Class
public void checkKillCollisions() {
boolean lose = false;
for (int i = 1; i < Snake.segments.size(); i++) {
if (Snake.segments.get(i).x == x && Snake.segments.get(i).y == y) {
lose = true;
break;//Have to do this
}
}
if (x >= 60 || x < 0 || y >= 60 || y < 0) {
lose = true;
}
if (lose) {
Snake.window.popUp("You Lose");
}
Snake.gameOver = lose;//Will set the gameOVer flag in Snake class
}我修改了循环类,使其在gameOver标志设置为true后立即停止运行
class Loop extends TimerTask {
@Override
public void run() {
if (!Snake.gameOver) {
Snake.updates();
Snake.window.render();
} else {
System.out.println("Game Over");
cancel();
Snake.window.dispose();
}
}
}https://stackoverflow.com/questions/31123715
复制相似问题