2012-07-22 77 views
0

我對box2d非常陌生,我只想做一個簡單的檢查,看看點是否在cocos2d的多邊形內。b2PolygonShape :: TestPoint(p1,p2)中的轉換參數是什麼?

b2PolygonShape polygon; 
b2Vec2 vertices[] = 
{ 
    b2Vec2(300, 400), 
    b2Vec2(350, 400), 
    b2Vec2(300, 500), 
    b2Vec2(350, 500) 
}; 

polygon.Set(vertices, 4); 
if(polygon.TestPoint(b2Transform(), b2Vec2(301, 405))) 
{ 
    CCLOG(@"Point is inside"); 
} 

我不明白什麼第一個參數期待b2transform。爲什麼需要這個,我應該怎麼設置?有什麼我忘了?我試圖做到這一點,沒有做任何複雜的事情就像擁有一個worldobject等。最簡單的方法是什麼?

回答

1
bool TestPoint(const b2Transform& transform, const b2Vec2& p) const; 

變換讓你specifiy在本地座標的多邊形,然後轉換它(平移和旋轉)到其期望的位置/方向。如果你想希望多邊形頂點是世界空間座標,使用的身份(如與1相乘)變換:

btTransform identity; identity.SetIdentity(); 
polygon.TestPoint(identity, ... 

你需要明確地將它設置爲身份,在這兩個b2Transform及其兩個默認的構造函數成員b2Vec和b2Rot不做任何事情,因此將在發佈版本中包含隨機垃圾(調試通常將所有未加入值設置爲0)。

有關詳細信息,請參閱b2Math.h和b2PolygonShape.cpp。

+0

謝謝!我想我明白了,明天我會嘗試,如果結果正確,則標記爲正確。 – 2012-07-22 00:52:36

相關問題