与自身的蛇碰撞检测

时间:2014-02-25 19:03:17

标签: android collision intersect

我目前正在用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方向乘以一个单元格空间(大小) - &gt; dx *尺寸和dy *尺寸。 然后身体的其余部分移动,头部后面的部分得到头部的坐标,该部分后面的部分从他面前的部分获得coodrinates等。

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

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()方法。我不知道为什么,因为第二部分应该在头部后面放置两个体部,这使得它不可能与头部矩形相交。

我的问题在哪里?

1 个答案:

答案 0 :(得分:0)

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

尽管如此,感谢回复!

新的addPart方法,更正了parts.get(0) - &gt; 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));
    }
}