ho qualche semplice configurazione corpi box2d con un listener contatto in questo modo:Rileva collisione iniziale di due corpi box2d senza collisioni continua
#import "MyContactListener.h"
MyContactListener::MyContactListener() : _contacts() {
}
MyContactListener::~MyContactListener() {
}
void MyContactListener::BeginContact(b2Contact* contact) {
// We need to copy out the data because the b2Contact passed in
// is reused.
MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB() };
_contacts.push_back(myContact);
b2Body *A = contact->GetFixtureA()->GetBody();
b2Body *B = contact->GetFixtureA()->GetBody();
NSLog(@"Collision detected!");
PLAYSOUND(COLLISION);
}
void MyContactListener::EndContact(b2Contact* contact) {
MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB() };
std::vector<MyContact>::iterator pos;
pos = std::find(_contacts.begin(), _contacts.end(), myContact);
if (pos != _contacts.end()) {
_contacts.erase(pos);
}
}
void MyContactListener::PreSolve(b2Contact* contact, const b2Manifold* oldManifold) {
}
void MyContactListener::PostSolve(b2Contact* contact, const b2ContactImpulse* impulse) {
}
E ho bisogno di riprodurre un suono quando due corpi si sono scontrati. Tuttavia, questa implementazione rileva continue collisioni in modo che il suono venga riprodotto quando i corpi si toccano. La mia conoscenza di box2d e C++ è già molto limitata, c'è un modo semplice per rilevare una nuova collisione senza rilevare collisioni continue?
Ti suggerisco di passare attraverso [tutorial] (http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone) in modo che tu sarebbe in grado di rilevare una singola collisione – Marine
"Quando due corpi sono entrati in collisione" = BeginContact. Questa non è una cosa continua, è per questo che si chiama 'Begin' :) – iforce2d