2014-02-13 126 views
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

灰色的瓷砖和树应该是造成碰撞,在那里作为棕色的不是。

回答

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(); 
+0

与问题无关,但当您有一个名为'Enemy'的类时,为什么在'getEnemyPosX()'这样的函数中使用重复的单词。阅读'e.getPosX()'不会更容易'' – vikingmaster

+0

这是一个剩余的名字,它最初在另一个类中。 – Djulio