1

我正在尝试在一个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,以便它只true在从顶部碰撞时返回。我怎样才能做到这一点?

谢谢。

4

3 回答 3

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()

于 2013-06-13T20:26:27.627 回答
0

如果您总是知道墙的顶部在哪里,您可以添加一个检查以确保它是那个部分

 if (getBounds().intersects(wall.getBounds()) && 
    wall.intersectPoint == *wall.getTopBounds*) //you'd probably have to write this
        return true;
于 2013-06-13T20:22:59.670 回答
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;
}

确定相交后,插入一些代码来确定您是否在墙上方。如果您不在墙上方,请跳到下一堵墙。

于 2013-06-13T20:23:04.850 回答