回答
**選項1 **
利用一款機身搭配兩場比賽:第一是中央圓形給身體一些質量。第二個是橢圓形,頂點由鏈狀構成。
第一個夾具可以使您的身體像一個有質量的身體一樣行動,而第二個夾具可以讓您正確處理碰撞。
我最近做了一個輪盤賭的例子。我發佈了下面的代碼來創建它。將橢圓的常數值(OUTER_RADIUS)替換爲橢圓的極座標形式found here on wikipedia。
void MainScene::CreateBody()
{
const float32 INNER_RADIUS = 2.50;
const float32 OUTER_RADIUS = 3.0;
const float32 BALL_RADIUS = 0.1;
const uint32 DIVISIONS = 36;
Vec2 position(0,0);
// Create the body.
b2BodyDef bodyDef;
bodyDef.position = position;
bodyDef.type = b2_dynamicBody;
_body = _world->CreateBody(&bodyDef);
assert(_body != NULL);
// Now attach fixtures to the body.
FixtureDef fixtureDef;
fixtureDef.density = 1.0;
fixtureDef.friction = 1.0;
fixtureDef.restitution = 0.9;
fixtureDef.isSensor = false;
// Inner circle.
b2CircleShape circleShape;
circleShape.m_radius = INNER_RADIUS;
fixtureDef.shape = &circleShape;
_body->CreateFixture(&fixtureDef);
// Outer shape.
b2ChainShape chainShape;
vector<Vec2> vertices;
const float32 SPIKE_DEGREE = 2*M_PI/180;
for(int idx = 0; idx < DIVISIONS; idx++)
{
float32 angle = ((M_PI*2)/DIVISIONS)*idx;
float32 xPos, yPos;
xPos = OUTER_RADIUS*cosf(angle);
yPos = OUTER_RADIUS*sinf(angle);
vertices.push_back(Vec2(xPos,yPos));
}
vertices.push_back(vertices[0]);
chainShape.CreateChain(&vertices[0], vertices.size());
fixtureDef.shape = &chainShape;
_body->CreateFixture(&fixtureDef);
}
您還可以檢查出this post的輪盤賭(加圖片善良)的解決方案。
選項#2 除了使用鏈條/邊緣形狀,您可以創建一個夾具的三角形風扇。一旦你有橢圓的頂點,你可以做類似的事情:
b2Vec2 triVerts[3];
triVerts[0] = Vec2(0,0);
for(int idx = 1; idx < vertices.size(); idx++)
{
b2PolygonShape triangle;
fixtureDef.shape = ▵
// Assumes the vertices are going around
// the ellipse clockwise as angle increases.
triVerts[1] = vertices[idx-1];
triVerts[2] = vertices[idx];
triangle.Set(triVerts,3);
_body->CreateFixture(&fixtureDef);
}
對您有幫助嗎?
這樣的聲音應該更容易出現問題(東西可以更容易隧道內如果基於多邊形的主體是單個多邊形夾具,則該鏈條會卡住多邊形的「接縫」,並且不存在「接縫」),並且不如使用完全相同的鏈幾何體定義多邊形那樣優雅。儘管如此,還是有b2_maxpolygonvertices限制要解決,超過此限制,您需要使用多個固定裝置來定義橢圓。此外,無論如何,這個圈子的重點是什麼?直接設置質量並丟棄完全未使用的圓形。 – 2013-12-13 02:28:19
如果您閱讀Box2dCode中的註釋,說:「您不能增加太多,因爲b2BlockAllocator具有最大的對象大小。」爲b2_maxPolygonVertices定義。此外,您可以將對象設置爲「項目符號」,並使用固定的時間步驟來減少隧道可能性。沒有解決方案是完美的但這應該工作。 – FuzzyBunnySlippers 2013-12-13 02:37:14
也許你不需要這個圓圈......我以爲你無法爲連鎖形狀設置質量...我會檢查一下。 – FuzzyBunnySlippers 2013-12-13 02:39:13
- 1. 在矩形內創建橢圓/圓形
- 2. 如何創建橢圓形幾何形狀
- 3. 在Java中移動橢圓和橢圓形狀?
- 4. CSS定義形狀橢圓
- 5. 如何在Javascript中使用Photoshop創建圓形或橢圓形選區?
- 6. 如何在WPF應用程序中創建橢圓形按鈕?
- 7. 如何在TKInter中創建3個橢圓形的頂部
- 8. 橢圓幾何自定義形狀
- 9. 重繪餅圖中橢圓形狀highcharts
- 10. 如何創建圓角形狀的ListView
- 11. 如何在Java中旋轉橢圓形狀?
- 12. 如何在圖像中圍繞物體繪製橢圓形狀
- 13. 在橢圓形中製作橢球體
- 14. box2d和cocos2d中的橢圓夾具
- 15. Pyqtgraph:如何繪製橢圓或圓形
- 16. 如何創建一個橢圓UIView?
- 17. box2d破壞並重新創建形狀
- 18. 創建複雜的形狀與Box2D的
- 19. 如何繪製形狀像橢圓形,線和手勢
- 20. 如何用css創建一個橢圓矩形?
- 21. 如何用VC++使用win32 API創建橢圓形窗口
- 22. 如何創建一個淺橢圓形的CSS3陰影
- 23. 如何創建unity3d向下橢圓形圈的道路?
- 24. 向JPanel添加橢圓形狀
- 25. android橢圓形狀對話框
- 26. 如何使用Box2D創建一個圓形約束槳?
- 27. 如何繪製一些形狀(橢圓形或橢圓形)並計算其面積?
- 28. 如何在橢圓形狀上書寫文字
- 29. 如何在橢圓形狀內繪製一個點
- 30. InkCanvas表面可以是圓形/橢圓形狀嗎?
在這些演示中有一個蛋形,也許你可以看看他是怎麼做到的:http://www.sideroller.com/wck/ – iforce2d 2012-04-06 17:36:29
「定義一個」可拉伸「的圓圈,如果高度和寬度相同,則使用規則的圓形形狀,否則將創建多邊形近似。「 它來自世界建築工具包的文件。我希望他們完成水漬... – Pavel 2012-08-13 15:07:52
我發佈了一個答案...對不起,它花了一段時間...不得不想一點... – FuzzyBunnySlippers 2013-12-13 02:22:28