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
}
現在來看一下它裡面的變數:
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
}
全站熱搜
留言列表