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");
}
}
}
不應該這樣做每次它重疊爆炸爆頭?相反,它總是似乎繼續評估爲真。
爲什麼它一直在評估真實和寫熱潮爆頭?
'sprite.getBoundingRectangle()'方法爲'Sprite'創建了一個'BoundingRectangle'。這意味着,當你移動'Sprite'時,它不是一個引用,它會被更新。因此,爲了保持'collisionBoxBullet'和'collisionBoxMonster'爲最新,您需要每幀調用'sprite.getBoundingRectangle'。另外請確保'子彈'和'怪物'不要齋戒,這樣它們就不會彼此「隧道」! – Springrbua 2014-11-25 09:30:46
非常感謝,我每次都更新邊界矩形,但它總是說「熱潮爆頭」並評估爲真。爲什麼這是有條件評估爲真? – 2014-11-26 02:20:16
這很難說......在if條件之前嘗試'System.out.println()'並打印出2個'collisionBox'。然後向我展示一些檢查的結果,而不僅僅是一個。 – Springrbua 2014-11-26 06:37:56