嗨,我有一個由多個物體組成的物體,它們之間的區別是有人是過濾器,而其他人不是。 我希望我的演員在與物理側碰撞時被破壞,並在碰撞傳感器時產生不同的效果。 那麼,如果我的碰撞監聽器中有一部分或另一部分發生接觸,我該如何檢查?libgdx - 與不同物體制成的物體碰撞
回答
比方說,你有一張桌子和一堆奶牛,你想要確定是否有牛與表碰撞。
Body table;
Array<Body> cows;
//define the table and cows
ContactListener listener = new ContactListener() {
@Override
public void beginContact(Contact contact) {
Body bodyA = contact.getFixtureA().getBody();
Body bodyB = contact.getFixtureB().getBody();
for (Body cow : cows) {
if (((cow == bodyA) || (cow == bodyB)) &&
((table == bodyA) || (table == bodyB))) {
//do something
}
}
}
};
這是一個通用的答案,但它會告訴你如何檢查哪些機構發生了碰撞,我相信回答你的問題。
我接觸監聽器有沒有我的知名度對象。該項目是一個有幾個級別的遊戲,我創建了任何級別的不同種類的對象的新實例。我可以通過這些bodyA和bodyB來檢查哪個身體(來自碰撞類屬性的身體)與另一個actor發生碰撞?現在我的技術就像「if(bodyA.getUserata()instaceof ClassA && bodyB.getUserData()ClassB的實例)」,但在這種情況下,該類的實例是不夠的,我需要現在,如果它是一個特定的該類的主體 –
只要您在類的對象中提供了一個getter方法,該方法可以由偵聽器訪問,以告知偵聽器該主體是否可以碰撞。像'bodyA.isCollideable();'''''''''''''''''''''''''' 'MyBodyClass bodyA =(MyBodyClass)contact.getFictureA()。getBody();'擴展Body並添加getter方法的替代方法是使用'get [set] UserData()'設置並獲取'boolean' if身體是可以碰撞的。 –
我的課程沒有擴展正文。它有三個屬性,只有其中一個應該可以與其他副作用交叉,以便在偵聽器中執行 –
有可能有很多方法可以做到這一點,但這裏是我如何做我的物理遊戲對象映射。不是我堅持宗教的東西,但我嘗試 - 總是有例外。
如果我有一個「遊戲對象」,它有一個主體。屍體用戶數據被設置爲該對象。
如果我有一個由部件組成的「遊戲對象」,這些部件就是「遊戲對象部件」,它們將是body的燈具的用戶數據。
我的「遊戲對象」是與「身體有夾具」部件相同方式的「部件對象」的組合。
如果你有這樣的事情,那麼你可以很容易地區分碰撞中物體的各個部分。如果你真的希望你的「遊戲對象」由於其他原因而由多個物體組成,那麼我仍然會讓「遊戲物體」具有「部件」,這些「部件」被設置爲構成它的物體的用戶數據。希望有所幫助。
我還要再走一步 - 我的「遊戲對象」擁有自己的碰撞處理程序集合。所以我的單個註冊的碰撞偵聽器獲取用戶數據對象並使用相同的參數調用它們的碰撞處理程序。利用多態性傢伙。現在我可以將給定對象所需的碰撞行爲附加到該對象上。我不必遍歷所有對象來決定在註冊的碰撞偵聽器中做什麼。
我已經解決了我的情況,碰撞處理程序部分是一個好主意,非常有用,雖然 –
- 1. 與角度物體碰撞
- 2. 與兩個物體碰撞
- 3. 與多個物體碰撞
- 4. 運動物體碰撞檢測LIBGDX
- 5. 物體碰撞系統?
- 6. LUA碰撞,多個物體
- 7. 物理體碰撞檢測
- 8. 與移動物體的碰撞
- 9. 物體沒有與邊界碰撞
- 10. Box2d/Libgdx將物體與物體合併
- 11. 在另一個物體的同一點生成物理對象並移動生成的物體而不與第二個物體在電暈中碰撞sdk
- 12. Libgdx和Box2d檢測兩個特定物體的碰撞
- 13. Libgdx實現拍攝(子彈和物體之間的碰撞)
- 14. 沒有摩擦的Box2D物體碰撞
- 15. 非方形物體的碰撞檢測
- 16. 補間物體上的碰撞檢測
- 17. 忽略Box2d中的物體碰撞(iphone)
- 18. 跟隨物體時的相機碰撞
- 19. 兩個物體之間的碰撞
- 20. libgdx/jBox2d在碰撞時增加幻像物體?
- 21. Andengine碰撞 - 檢測碰撞和刪除物體時的例外
- 22. 兩個物體不會在Farseer物理碰撞3.3.2
- 23. levelhelper-spritehelper-corona sdk-物體碰撞
- 24. 動態物體碰撞行爲
- 25. Unity 2D C# - 物體內沒有碰撞
- 26. 統一:球員死在物體碰撞
- 27. 當彼此碰撞時移開物體
- 28. 發生碰撞時移除物體
- 29. Phaser P2 body.collideWorldBounds停止物體碰撞
- 30. Libgdx Ashley實體碰撞
http://stackoverflow.com/questions/17829115/libgdx-and-box2d-detect-collision-of-two-specific-bodies/17829707#17829707 這可能幫助 –