随着蛇变大,我的蛇游戏一直在慢慢地运行。我已将其缩小到导致问题的代码块:
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,所以我只是在结束游戏的任何事情上手动完成。
您可以尝试以下方法:
1.您可以创建一个已经占用的地图或一组(x,y)坐标并对其进行检查。这将比访问更频繁地更新。
你可以为每个电路板位置创建一个二维布尔数组。检查会非常快。更新需要一些时间。它取决于两者发生的相对频率。