.intersects总是回归真实?

时间:2014-02-13 00:36:14

标签: java lwjgl slick2d

我一直在研究混合了awt和slick2d的游戏(渲染是通过awt完成的)。无论如何,我遇到了碰撞问题。在实体类中,我有一个碰撞方法:

public boolean colidesWithWall(int idx, int idy) {
    //if(Level.solid)
    wall = new Rectangle(idx, idy, Tile.Size, Tile.Size);
    if (this.getBoundingBox() == null) {
        return false;
    }
    return this.getBoundingBox().intersects(wall);


}

在我的“Core.java”文件中,我有一个for循环通过colidesWithWall方法迭代tile。我在这里也有一个if语句,所以它只会检查碰撞层上的tile。 (我的地图有四层,背景,碰撞,物品和敌人)。

for (int i = 0; i < entities.size(); i++) {
            Entity me = entities.get(i);

            for (int k = 0; k < 100; k++) {
                for (int l = 0; l < 100; l++) {
                    if (Level.getColision(k, l)) {
                        Entity entity = entities.get(i);
                        if (entity.colidesWithWall(k, l)) {
                            entity.collidedWithWall();
                            frameCounter = 0;

                        }
                    }
                }
            }
        }

好吧无论如何,发生的事情是,游戏总能检测到碰撞发生。此外,玩家X&amp; Y坐标由此定义:

 ((int) ((rouge.screenSize.width) / 2 - Tile.Size / 2 + rouge.oX)) / Tile.Size, ((int((rouge.screenSize.height) / 2 - Tile.Size / 2 + rouge.oY))/Tile.size

rouge.oY和rouge.oX是我的相机偏移

Tile.Size是我的Tiles的大小:32

以下是发生的事情的屏幕截图:http://i.imgur.com/zYONBOC.png

灰色瓷砖和树应该引起碰撞,而棕色瓷砖则没有。

1 个答案:

答案 0 :(得分:0)

这是我的游戏内容。我希望它能以某种方式帮助你,因为我不确定如何能够帮助你,而不仅仅是你所给予的。

获得玩家的界限:

private static Rectangle getPlayerBounds() {
    return new Rectangle((int)player.getPositionX(), (int)player.getPositionY(), playerTexture.getImageWidth(), playerTexture.getImageHeight());
}

获取实体(在我的情况下是敌人)的界限:

private static Rectangle getEnemyBounds(Enemy e) {
    return new Rectangle(e.getEnemyPosX(), e.getEnemyPosY(), enemyTexture.getImageWidth(), enemyTexture.getImageHeight());
}

然后我有了checkCollision():

public static void checkCollisions() {
     for(int i = 0; i < getEnemyList().size(); i++) {

        Enemy tempEnemy = getEnemyList().get(i);

        if (getPlayerBounds().intersects(getEnemyBounds(tempEnemy))) {
            getEnemyList().remove(tempEnemy);
        }
    }
}

最后我只是在我的Movement.java中调用它:

    MovementChecks.checkCollisions();