close
contact edge用來將contact graph裡面的bodies和contacts連接起來,而裡面的bodies都是nodes,contact都是一個contact edges。contact edge屬於每個attached body中維持的雙重連結列表。每一個contact有兩個contact nodes,每個attached body有一個contact。

現在來看一下它裡面的變數:

b2Body的指標:other,提供一個可以快速訪問other attached body
b2Contact的指標:contact,這就是contact
b2ContactEdge的指標:prev,body的contact列表中的前一個contact edge
b2ContactEdge的指標:next,body的contact列表中的下一個contact edge

使用這方法要注意,因為他可能會漏掉一些contact,比方說,只有接觸到一個點,那他會因為立刻被彈開的關係,就沒有接觸了,這種太快結束(極短時間步內結束)的contact就無法被偵測到。

如果要更好的方法,就請使用b2ContactListener。

簡單示範一下用法,比方說,你要檢查bodyA上的接觸。因為接觸到bodyXmen(未免和Box2D內的方法名稱搞混故取此名)的接觸都會被存下來,保存成一個列表,所以要呼叫出bodyXmen上的這個列表。

b2ContactListener *edge = bodyXmen->GetContactList();

然後要檢查列表中的contact,比方說,你要檢查bodyXmen有沒有和bodyBad接觸,那你要對edge列表中的每一個contact取出它上面的兩個接觸的fixtures,然後對這些fixtures找出它們是貼附在哪個body上的,然後用if迴圈檢查是不是我們想要的那兩個bodies:

b2Contact *contact = edge->contact;
b2Fixture *fixtureA = contact->GetFixtureA;
b2Fixture *fixtureB = contact->GetFxitureB;
b2Body *bodyA = fixtureA->GetBody();
b2Body *bodyB = fixtureB->GetBody();

if (bodyA == bodyXmen && bodyB == bodyBad){
//......do something
}

arrow
arrow
    全站熱搜

    clouddeep 發表在 痞客邦 留言(0) 人氣()