人物与墙壁的碰撞

时间:2013-06-13 20:17:26

标签: java collision-detection

我正在尝试在Character类中编写一个函数,这样当它与Wall对象(它是一个平台游戏)的顶部发生碰撞时,它会返回true。到目前为止,我在Character类中有这个:

private boolean isTouchingTopOfWall() {
    for (Wall wall: game.getPanel().getWalls())
        if (getBounds().intersects(wall.getBounds()))
            return true;
    return false;
}

CharacterWall类中有两个函数,如下所示:

public Rectangle getBounds() {
    return new Rectangle(x, y, game.getBlockSize(), game.getBlockSize());
}

除了当Character对象与Wall对象的一侧发生碰撞时,它的作用完全不同,当我想要它时它也返回true,这样它只返回{{当它从顶部发生碰撞时。我怎么能这样做?

感谢。

3 个答案:

答案 0 :(得分:0)

如果你总是知道墙的顶部在哪里,你可以添加一张支票以确保它的那一部分

 if (getBounds().intersects(wall.getBounds()) && 
    wall.intersectPoint == *wall.getTopBounds*) //you'd probably have to write this
        return true;

答案 1 :(得分:0)

private boolean isTouchingTopOfWall() {
    for (Wall wall: game.getPanel().getWalls())
        if (getBounds().intersects(wall.getBounds())) {
            int charBottomY = character.getY() + character.getBlockSize();
            int wallTopY = wall.getY();
            if(charBottomY <= wallTopY)
                return true;
        }
    return false;
}

确定相交后,插入一些代码,确定您是否在墙上。如果你不在墙上,请跳到隔壁。

答案 2 :(得分:0)

private boolean isTouchingTopOfWall() {
    for (Wall wall: game.getPanel().getWalls())
        if (getBounds().y< wall.getBounds().y)  //top wall
            return true;
        if (getBounds().y + getBounds().getHeight() > wall.getBounds().getHeight())
            return true;   //bottom wall
    return false;
}

只应检查底部和顶部墙(您可以省略),更优雅的方法,但至少您不必更改getWalls()