mam trochę ciał prostych box2d konfigurację z detektorem kontaktowym tak:Detect początkowego zderzenia dwóch ciał box2d bez ciągłej kolizji
#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) {
}
I muszę odtworzyć dźwięk, gdy dwa ciała zderzyły. Jednak ta implementacja wykrywa ciągłe kolizje, więc dźwięk jest odtwarzany, gdy ciała się dotykają. Moja znajomość box2d i C++ jest już bardzo ograniczona, czy istnieje prosty sposób na wykrycie nowej kolizji bez wykrycia ciągłych kolizji?
Proponuję, aby przejść [tutorial] (http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone), aby będzie w stanie wykryć pojedynczą kolizję – Marine
"Gdy zderzą się dwa ciała" = Rozpocznij kontakt. To nie jest ciągła rzecz, dlatego nazywa się "Begin" :) – iforce2d