我正在制作蛇游戏,但我遇到了错误
我尝试了两种不同的循环:thread.sleep
和Timer.schedule
我遇到了同样的问题
它将正常工作,但是在随机的时间间隔内,它将开始跳过每隔一帧6-10帧
如果我不清楚,1帧是
@Override public void paintComponent(Graphics G){...}
被召唤。 (我也尝试过油漆)
这种情况发生在我创造的其他一些游戏中,但不是全部。我该怎么做才能解决它?
这是代码的完整副本: https://github.com/jnmcd/Snake/blob/master/Code.java
编辑:我做了一些调试。它似乎不是油漆的问题。 JPanel并不总是更新。我该怎么做才能解决它?答案 0 :(得分:0)
我找到了我需要做的事情。我必须在重绘()之后添加一个revaidate()。
答案 1 :(得分:0)
同样在checkKillCollisions
中,你必须在找到失败状态后立即打破循环。
此外,如果游戏结束,它会一直显示错误消息[对话框],但我没有结束。所以我创建了一个标记gameOver来检查游戏是否已经过Snake
Class
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
}
我已经修改了Loop类,以便在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();
}
}
}