2014-02-13 166 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