Tôi có một số đơn giản thiết lập cơ quan Box2D với một người biết lắng nghe tiếp xúc như vậy:Phát hiện va chạm ban đầu của hai cơ quan Box2D mà không cần liên tục va chạm
#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) {
}
Và tôi cần phải chơi một âm thanh khi hai cơ quan đã va chạm. Tuy nhiên, việc thực hiện này phát hiện va chạm liên tục nên âm thanh được phát khi các cơ quan chạm vào. Kiến thức của tôi về box2d và C++ đã rất hạn chế, có cách nào đơn giản để phát hiện một va chạm mới mà không phát hiện va chạm liên tục không?
Tôi đề nghị bạn đi qua [hướng dẫn] (http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone) để bạn sẽ có thể phát hiện va chạm đơn – Marine
"Khi hai vật thể va chạm" = BeginContact. Đây không phải là một điều liên tục, đó là lý do tại sao nó được gọi là 'Bắt đầu' :) – iforce2d