Во-первых, создайте подкласс класса C ++ b2ContactListener, например:
class GamePhysicsContactListener : public b2ContactListener
{
public:
GamePhysicsContactListener();
~GamePhysicsContactListener();
void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse);
};
Реализуйте метод PostSolve
для проверки двух тел, которые находятся в контакте, используя:
b2Body *bodyA = contact->GetFixtureA()->GetBody();
b2Body *bodyB = contact->GetFixtureB()->GetBody();
И, наконец, создайте экземпляр слушателя, вызвав строку ниже в методе, в котором вы создаете экземпляр b2World
(наиболее вероятно в вашем методе CCLayer init
):
_world->SetContactListener(new GamePhysicsContactListener());
p / s: вместовыполняя логику проверки контактов в классе GamePhysicsContactListener, вы также можете заставить этот класс принимать цель и селектор, который будет вызываться с помощью NSInvocation.Это было бы немного сложнее.
РЕДАКТИРОВАТЬ:
Вот рабочая реализация GamePhysicsContactListener: https://gist.github.com/922824 (это часть моей частной платформы GamePhysics, которая соединяет Cocos2D и Box2Dклассы)