2013-10-04 87 views
0

我有一個關於b2Fixture的問題。我有一個多夾具(多邊形)的身體。例如,在我的圖片中,您可以看到一個包含多個燈具的物體。身體中間的線應該代表一個點。我的問題是我怎樣才能找出哪些裝置在哪個站點上,包括連接的燈具。Box2D - b2Fixture觸摸

Illustration1

我的第一個throught是通過每個燈具的所有頂點循環,並找出當前頂點是從線位於(左邊還是右邊?)。

但是這不起作用,因爲右側的燈具可以與其他燈具相連,​​如圖中所示,這些燈具在線上重疊。

Illustration2

那麼,有沒有辦法找出哪些夾具與其他夾具連接?或者我可以從左至右訂購燈具嗎?

希望任何人都能理解我。而遺憾的形象不好(:。

預先感謝您

問候亞歷

回答

1

我的建議是保持跟蹤燈具的建造過程中,您必須在某個點來創建這些燈具,因爲你沒有標記box2d的任何特定版本,我會假設你使用的是C++版本

box2d允許你爲SetUserData如果你還沒有使用userData那麼你可以使用這是指存儲燈具的鄰居的對象。一個簡單的結構可能是這樣的:

struct FixtureNeighbors 
{ 
    b2Fixture* leftNeighbor; 
    b2Fixture* rightNeighbor; 
}; 

在施工過程中的燈具,應該創建一個FixtureNeighbors對象,將它轉換爲void*,並調用b2Fixture::SetUserData。然後,在遊戲過程中,無論何時你想知道一個燈具的鄰居是誰,只要致電b2Fixture::GetUserData,將結果轉換回fixtureNeighbors對象,然後用它來訪問左右鄰居。

注意

如果您已經使用夾具userData指向一個實體或別的東西,你應該添加一個GetEntity方法您FixtureNeighbors結構,你仍然可以訪問實體,如果你有夾具。

如果一個燈具可以觸摸兩個以上的鄰居,只需使用stl vector來存儲它們的列表。

我希望這有助於!

+0

嗨NauticalMille,這個建議聽起來不錯。是的你是對的,我正在使用C++版本。我會嘗試(: –

+0

評論,如果你有任何問題,我會很樂意澄清任何事情。 – NauticalMile