问题
I'm developing a little Android game in Java, using AndEngine for graphics and Box2D for physics - specifically, collision handling. I have some different types of objects with constructors in classes, like so:
MainActivity.java
Enemy.java
Npc.java
Door.java
I have a static PhysicsWorld in the main class, and I was setting up a ContactListener from the Enemy class, to define what happens when one of the enemies hits something. However, I tried to set up another ContactListener for the Door class, when I discovered that each PhysicsWorld has only one ContactListener.
Essentially, my question is this: what is the best way to get around this?
I'm aware I've probably explained this rather badly, so my apologies.
回答1:
You can use your single ContactListener to manage the entire world; Contact.getFixtureA/B() will return the fixtures involved in the contact. You can utilize Fixture.getBody() to get the associated Body with each collision fixture; if, for example, your Door and Enemy objects are associated with the Bodys as user data, then you can use Body.getUserData() to retrieve that.
来源:https://stackoverflow.com/questions/11835981/box2d-andengine-contactlistener-for-multiple-object-classes