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 }
文章標籤
全站熱搜
創作者介紹
創作者 clouddeep 的頭像
clouddeep

學.思

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