2014-03-03 29 views
0

我有一個2D側滾動遊戲,有點像metroid-vania,我有一些NPC我想補充,我想用重力模擬它們在世界上(他們碰撞地板),但我不希望他們與球員相撞。Jbox2D isSensor for NPC collision

將燈具設置爲isSensor = true,會導致NPC落地,並將其設置爲false使其與玩家發生碰撞。

有沒有什麼辦法可以在不模擬不同世界的情況下完成這個任務,然後檢查位置?

+1

你不能做這樣的事情: '如果(whoiscolliding的instanceof NPC!)' – Ferdz

+0

我想過,但我不知道該怎麼禁用基於個案的碰撞,Box2D會假設您是否可以與它碰撞,一切都可以與它碰撞傳感器會忽略所有碰撞,並且非傳感器動力學與其他Dynamics,Kinematics和Static對象發生碰撞。如果有辦法做到這一點,我不知道它 – Snowdrama

回答

0

使用的Box2D的內置過濾器可過濾的碰撞,使他們不衝突

FixtureDef floorFixture 
floorFixture.filter.categoryBits = 4 

FixtureDef playerFixture 
playerFixture.filter.catagoryBits = 2; 
playerFixture.filter.maskBits = 4; 

FixtureDef npcFixture 
npcFixture.filter.catagoryBits = 2; 
npcFixture.filter.maskBits = 4; 

在這個例子中,玩家和NPC不應該互相碰撞,但會與地板碰撞。

在這裏閱讀更多(搜索過濾):http://www.box2d.org/manual.html