我一直在研究混合了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
灰色瓷砖和树应该引起碰撞,而棕色瓷砖则没有。
答案 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();