我有一個紋理,不只是一個盒子或圓形,我的身體需要與這個形狀相同,所以我想要結合多個身體來達到我想要的形狀,甚至有可能嗎?或者有更好的方法來做到這一點?我用libgdx框架使用java。如何組合Box2d物體?
回答
身體的形狀正在由Fixture實例定義。由於人體可以有多個固定裝置,因此可以根據需要組合多種形狀。
創造出許多燈具你開玩笑跟別人打電話createFixture方法多次FixtureDef對象,如
FixtureDef fd1 = new FixtureDef();
FixtureDef fd2 = new FixtureDef();
...
fd1.shape = shape1;
fd2.shape = shape2;
...
body.createFixture(fd1);
body.createFixture(fd1);
雖然請注意Box2D的通過提供ChainShape,允許你創建支持比圓形和矩形更多任何你想要的形狀
ChainShape weird = new ChainShape();
weird.createLoop(new float[]{vertice1x, vertice1y, vertice2x, ...});
要加入屍體有聯合(看看here)機制,但我想這不是你想要的這裏
是的,你可以通過以下步驟進行下面
有一個適合你的工作PolygonShape或ChainShape的選項
第1步:定義一個身體。
BodyDef bd = new BodyDef();
Body body = box2d.world.createBody(bd);
第2步:定義形狀。
ChainShape chain = new ChainShape();
第3步:配置形狀。 ChainShape對象是一系列連接的頂點。要創建鏈,我們必須首先指定一個頂點數組(每個作爲Vec2對象)。 要創建具有頂點的鏈,該陣列然後被傳遞給函數調用
createChain().Vec2[] vertices = new Vec2[2];
vertices[0] = box2d.coordPixelsToWorld(0,150);
vertices[1] = box2d.coordPixelsToWorld(width,150);
chain.createChain(vertices, vertices.length);
,除非它被附連到本體的形狀沒有的Box2D的一部分。即使它是一個固定的邊界並且從不移動,它仍然必須被連接。
FixtureDef fd = new FixtureDef();
fd.shape = chain; A fixture assigned to the ChainShape
fd.density = 1;
fd.friction = 0.3;
fd.restitution = 0.5;
body.createFixture(fd);
多邊形
PolygonShape ps = new PolygonShape();
ps.setAsBox(box2dW, box2dH);
Vec2[] vertices = new Vec2[4];
vertices[0] = box2d.vectorPixelsToWorld(new Vec2(-15, 25));
vertices[1] = box2d.vectorPixelsToWorld(new Vec2(15, 0));
vertices[2] = box2d.vectorPixelsToWorld(new Vec2(20, -15));
vertices[3] = box2d.vectorPixelsToWorld(new Vec2(-10, -10));
PolygonShape ps = new PolygonShape();
ps.set(vertices, vertices.length);
官方測試平臺的例子
我強烈建議你去GUI上的所有測試平臺的例子,直到你找到你要找的效果。
通過這樣做,我能夠找到下面的例子:每身體
多個燈具作爲https://stackoverflow.com/a/35667538/895245提到:
- https://github.com/erincatto/Box2D/blob/f655c603ba9d83f07fc566d38d2654ba35739102/Box2D/Testbed/Tests/ShapeEditing.h#L61
- https://github.com/erincatto/Box2D/blob/f655c603ba9d83f07fc566d38d2654ba35739102/Box2D/Testbed/Tests/CompoundShapes.h
這是最好的方法到目前爲止我見過。
ChainShape
:https://github.com/erincatto/Box2D/blob/f655c603ba9d83f07fc566d38d2654ba35739102/Box2D/Testbed/Tests/CharacterCollision.h#L56但是如果其中一個邊緣不是直線,例如,一個圓圈。-
然而,這並沒有使這兩個機構完全加入,這些可以在例如本身可以看出,從Box2D的手冊:
這是很有誘惑力的使用焊接接頭定義可破壞的結構。然而,Box2D求解器迭代爲 ,所以關節有點軟。因此,通過焊接連接的物體鏈將彎曲
所以它更像是一個旋轉關節,它試圖將兩個物體留在給定的角度。
這些例子非常簡單,並且隨着Box2D的發展將會得到支持。
- 1. Box2d/Libgdx將物體與物體合併
- 2. Box2D與UIKit - 身體物理
- 3. box2d很多靜態物體
- 4. 沒有摩擦的Box2D物體碰撞
- 5. Box2D的靜態物體摩擦
- 6. 忽略Box2d中的物體碰撞(iphone)
- 7. Box2d物理體與Cocos2d sprite不同步
- 8. Box2D多裝置與多個物體
- 9. Box2d動態物體卡住靜態
- 10. Box2D模擬中的恆速物體
- 11. Box2D Flash 2.1 - 創建多個物體
- 12. 在box2d中拖拽一個物體
- 13. 用BOX2D殺死不活動的物體?
- 14. Box2D動態物體卡住(iPhone)
- 15. box2d(libgdx)堆疊物體不穩定
- 16. 如何更改移動物體的位置 - Box2D
- 17. 如何更改box2d中的物體大小?
- 18. 如何獲得box2d物體的當前移動速度
- 19. box2d:我如何順利旋轉指定數量的物體
- 20. 如何爬上Box2D中的其他物體?
- 21. Cocos2d/Box2d。如何從tilemap .tmx生成物理體?
- 22. Box2D:如何手動渲染一個物體
- 23. 如何清除AndEngine中碰撞的box2d物體?
- 24. 如何避免box2d中兩個物體之間的排斥
- 25. 如何用box2d調諧這個蹦牀/橡皮筋物體?
- 26. 如何結合scene2d和box2d?
- 27. Box2d傷害物理
- 28. 如何合併2個勻稱物體?
- 29. 如何合併在Java 2個物體
- 30. 如何獲取數組和物體的混合值
最後一部分的目的是什麼?如果您已經設置了fixtureShape = chain,則將其分配給主體。 –
最後一部分是與鏈狀分開的多邊形形狀。只要使用小代碼,您就可以瞭解其他形狀。 –