0
我一直在用awt和slick2d混合制作游戏(渲染是通过awt完成的)。无论如何,我遇到碰撞问题。里面的实体类的,我有一个碰撞方法:。交互总是返回true?
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”文件之外,我必须通过colidesWithWall法for循环迭代的瓷砖。我在这里也有if语句,所以它只会检查碰撞图层上的图块。 (我的地图有四层,背景,碰撞,物品和敌人)。
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 & 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是我瓷砖的大小:32
这里有一个屏幕截图:http://i.imgur.com/zYONBOC.png
灰色的瓷砖和树应该是造成碰撞,在那里作为棕色的不是。
与问题无关,但当您有一个名为'Enemy'的类时,为什么在'getEnemyPosX()'这样的函数中使用重复的单词。阅读'e.getPosX()'不会更容易'' – vikingmaster
这是一个剩余的名字,它最初在另一个类中。 – Djulio