蛇与自身的碰撞检测



我目前正在用java编写一些简单的贪吃蛇游戏。蛇对象有一个充满身体部位的数组。这些身体部位都包含一个矩形。

蛇的更新方法是这样的:

public void update() {
    if(isMoving) {
        if(System.currentTimeMillis() - moveTimer > moveSpeed) {
            if(parts.get(0).getX()+dx*size >= 0+GameView.GRID_PADDING_LEFT && parts.get(0).getY()+dy*size >= 0+GameView.GRID_PADDING_TOP && parts.get(0).getX()+dx*size <= ((GameView.GRID_WIDTH-1)*size)+GameView.GRID_PADDING_LEFT && parts.get(0).getY()+dy*size <= ((GameView.GRID_HEIGHT-1)*size)+GameView.GRID_PADDING_TOP) {
                for(int i = parts.size()-1; i > 0; i--) {
                    parts.get(i).setLocation((int)(parts.get(i-1).getX()), (int)(parts.get(i-1).getY()));
                }
                parts.get(0).setLocation(parts.get(0).getRect().left+dx*size, parts.get(0).getRect().top+dy*size);
                moveTimer = System.currentTimeMillis();
            }else {
                die();
            }
        }
    }
}

总而言之,蛇将其头部移动到dx方向乘以一个细胞空间(大小)-->dx*size和dy*size。然后身体的其余部分移动,头部后面的部分获得头部的坐标,该部分后面的部分从他前面的部分获得坐标,等等。

现在我正试图与蛇本身发生一些碰撞。我尝试了几种方法,例如:

if(parts.size() > 2) {
        for(int i = 3; i < parts.size(); i++) {
            if(parts.get(0).getRect().intersect(parts.get(i).getRect())) {
                die();
            }
        }
    }

但是一旦 bodypart 数组达到 2 个部分的限制,die() 方法就会被调用。我不知道为什么,因为第二部分应该位于头部后面的两个身体部位,这使得它不可能与头部矩形相交。

我的问题在哪里?

,这是我在这里做的一个非常大的失败。添加新零件时,新零件将获取头部的坐标。当然,当它在创建时获得它的坐标时会与头部相交!!

不过,感谢您的回复!

新的addPart方法,更正了parts.get(0) --> parts.get(parts.size()-1)

public void addPart(int amount) {
    for(int i = 0; i < amount; i++) {
        parts.add(new BodyPart(parts.get(parts.size()-1).getX(), parts.get(parts.size()-1).getY(), parts.get(parts.size()-1).getHue()-5));
    }
}

相关内容

  • 没有找到相关文章

最新更新