2014-11-25 149 views
0

我試圖爲我的遊戲實現使用矩形的碰撞檢測,但似乎無法使其工作。碰撞檢測Libgdx矩形

當每幀按下空格時會更新項目符號,以便它們在屏幕上移動。顯然我在這裏被告知,碰撞盒也隨之移動。我通過使用sprite.getBoundingBox()得到這個,它爲每個實例設置一個數據字段Rectangle爲這個值。

我有兩個Arraylists,一個持有Monsters的實例和一個持有Bullets的實例。他們都有與之相關的collisionRectangles。

只要有子彈或怪物arraylist中的東西,我從每個幀的主要渲染循環調用checkCollisions()方法。

/*this handles collisions between bullets and enemies*/ 
public static void checkCollisions(){ 
    for (int i = 0; i < Main.currentBullets.size(); i++){ 
     for (int k = 0; k < Main.currentMonsters.size(); k++){ 
      if (Intersector.overlaps(Main.currentBullets.get(i).collisionBoxBullet, 
        Main.currentMonsters.get(k).collisionBoxMonster)){ 
        System.out.println("Boom headshot"); 
       } 
     } 
    } 

不應該這樣做每次它重疊爆炸爆頭?相反,它總是似乎繼續評估爲真。

爲什麼它一直在評估真實和寫熱潮爆頭?

+0

'sprite.getBoundingRectangle()'方法爲'Sprite'創建了一個'BoundingRectangle'。這意味着,當你移動'Sprite'時,它不是一個引用,它會被更新。因此,爲了保持'collisionBoxBullet'和'collisionBoxMonster'爲最新,您需要每幀調用'sprite.getBoundingRectangle'。另外請確保'子彈'和'怪物'不要齋戒,這樣它們就不會彼此「隧道」! – Springrbua 2014-11-25 09:30:46

+0

非常感謝,我每次都更新邊界矩形,但它總是說「熱潮爆頭」並評估爲真。爲什麼這是有條件評估爲真? – 2014-11-26 02:20:16

+0

這很難說......在if條件之前嘗試'System.out.println()'並打印出2個'collisionBox'。然後向我展示一些檢查的結果,而不僅僅是一個。 – Springrbua 2014-11-26 06:37:56

回答

0

我沒有做的是設置在0.0的精靈的矩形的位置。我也沒有正確移動碰撞盒collisionBox.setPosition()

它首先檢查0/0處的sprite是否與0.0處的碰撞盒碰撞,因爲它始終爲真,因此總是說它是重疊的。