के बिना दो box2d निकायों के प्रारंभिक टक्कर का पता लगाने मैं बहुत की तरह एक संपर्क श्रोता के साथ कुछ सरल box2d निकायों सेटअप:निरंतर टकराव
#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) {
}
और मैं एक ध्वनि खेलने के लिए जब दो शरीर टकरा गए हैं की जरूरत है। हालांकि यह कार्यान्वयन निरंतर टकराव का पता लगाता है ताकि शरीर स्पर्श होने पर ध्वनि बजायी जा सके। Box2d और C++ का मेरा ज्ञान पहले से ही सीमित है, क्या निरंतर टकराव का पता लगाने के बिना एक नया टकराव का पता लगाने का एक आसान तरीका है?
मैं आपको [ट्यूटोरियल] (http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone) के माध्यम से जाने का सुझाव देता हूं ताकि आप एकल टकराव – Marine
का पता लगाने में सक्षम होगा "जब दो निकायों को टक्कर मिलती है" = BeginContact। यह एक निरंतर बात नहीं है, यही कारण है कि इसे 'शुरूआत' कहा जाता है :) – iforce2d