2011-10-10 115 views
2

我正在使用Cocos2d與Box2d編寫簡單的iOS遊戲。我已經有碰撞檢測工作了,但不是我想要的。我已經擴展b2ContactListener和檢測物體的碰撞是這樣的:Box2D中的高級碰撞檢測 - 碰撞點,力量等

void ContactListener::BeginContact(b2Contact* contact) 
{ 
    b2Body *aBody = contact->GetFixtureA()->GetBody(); 
    b2Body *bBody = contact->GetFixtureB()->GetBody(); 

    // collision between aBody and bBody occurred 

} 

我不能找出如何讓碰撞點,如果可能的話,碰撞衝擊力。有幾個教程如何獲得碰撞點,但他們都沒有爲我工作。我發現了一些使用b2CollisionPoint的例子,但它看起來像在當前版本的Box2d中不起作用。其他的例子實現了b2CollisionPoint的「Result」方法,但它也不工作 - 看起來它適用於以前版本的Box2d或其他平臺版本(Java或Flash)。

爲了更具體地說明我的問題,下面是我想要實現的一個示例: 我需要檢測遊戲對象之間的碰撞類型。我已經能夠檢測到球員夾具是否與地面夾具發生碰撞,但是我需要知道球員是站在地上還是與底部碰撞(想象平臺遊戲和碰到平臺的球員跳後)或其他方(球員跳入垂直牆)。如果我能夠找到碰撞點,我會更容易做到這一點。這在許多其他情況下也會有用。

回答

3

這個工作對我來說: http://www.cocos2d-iphone.org/forum/topic/6024

void ContactListener::PostSolve(b2Contact* contact, 
            const b2ContactImpulse* impulse) { 

    // find the strength of the impulse.. 
    int32 count = contact->GetManifold()->pointCount; 
    float32 maxImpulse = 0.0f; 
    for (int32 i = 0; i < count; ++i) { 
     maxImpulse = b2Max(maxImpulse, impulse->normalImpulses[i]); 
    } 

    NSLog(@"maxImpulse: %f", maxImpulse); 
} 
+0

您好,我有同樣的問題在檢測到接觸點。但是,通過將形狀定義的「isSensor」屬性設置爲true,PreSolve和PostSolve都不會被調用。但是,當「isSensor」屬性設置爲false時,應用程序以某種方式崩潰,我不確定原因。對此有何想法?謝謝! – Anthony