Box2dの連絡先リスナーCocos2d

box2d cocos2d-iphone iphone
Box2dの連絡先リスナーCocos2d

オブジェクトとの衝突が発生した後、スプライトを回転させて前方に移動したい。 ピクセル完全な衝突が必要なので、衝突はBox2dを使用する必要があります。 contactlistenerのヘッダーと実装クラスはありますが、メインクラスに実装するにはどうすればよいですか?

連絡先リスナーの私の.hファイルは

 #import "Box2D.h"
 #import
 #import

struct MyContact {
    b2Fixture *fixtureA;
b2Fixture *fixtureB;
bool operator==(const MyContact& other) const
{
    return (fixtureA == other.fixtureA) && (fixtureB == other.fixtureB);
}
};
class MyContactListener : public b2ContactListener {

public:
std::vector_contacts;

MyContactListener();
~MyContactListener();

virtual void BeginContact(b2Contact* contact);
virtual void EndContact(b2Contact* contact);
virtual void PreSolve(b2Contact* contact, const b2Manifold* oldManifold);
virtual void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse);

};

これは連絡先リスナー用の私の.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);
}

void MyContactListener::EndContact(b2Contact* contact) {
    MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB() };
    std::vector::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) {
}

メインクラスには私が持っています

contactListner = new MyContactListener;
world->SetContactListener(contactListner);

この後、スケジューラメソッドで衝突をチェックするにはどうすればよいですか?

助けてくれてありがとう

  0  0


ベストアンサー

スケジューラーメソッドで、連絡先をループし、衝突が正常かどうかを確認します。

for(pos = _contactListener->_contacts.begin();
        pos != _contactListener->_contacts.end(); ++pos) {
            MyContact contact = *pos;
     if(contact->fixtureA == ball && contact->fixtureB == wall){
        //Do something
     }
}

0


タイトルとURLをコピーしました