随着蛇的变大,我一直遇到蛇游戏运行缓慢的问题。我将其范围缩小到导致问题的这段代码:
for(int i = 0 ; i < snake.size(); i++) {
if(xCoor == snake.get(i).getxCoor() && yCoor == snake.get(i).getyCoor()) {
if(i != snake.size() - 1) {
stop();
tries = 1;
}
}
}
这是蛇的头部撞到蛇的身体的碰撞检测。除了删除它(删除游戏的核心)之外,我一直没有想到其他优化方法。我认为这是每个问题都存在的问题。我可以取消使用刻度线,但是我不知道如何开始使用刻度线。
编辑:这是我设置游戏时间的方法:
public void tick() {
if(snake.size() == 0) {
b = new BodyPart(xCoor, yCoor, 10);
snake.add(b);
}
ticks++;
if(ticks > 750000) {
}
}
EDIT2 :Thread.sleep(60)成就了奇迹!我的stop()方法不再起作用了,但是它实际上所做的全部设置为false,所以我只是在结束游戏的任何事情上手动进行了操作。
答案 0 :(得分:2)
您可以尝试以下方法:
1。您可以创建一个地图或一组(x,y)坐标已被占用并对其进行检查。与访问相比,此更新的频率要低得多。
2。您可以为每个电路板位置创建一个二维布尔数组。检查会很快。更新将需要一些时间。这取决于两者发生的相对频率。