2016-02-27 80 views
2

我有一個紋理,不只是一個盒子或圓形,我的身體需要與這個形狀相同,所以我想要結合多個身體來達到我想要的形狀,甚至有可能嗎?或者有更好的方法來做到這一點?我用libgdx框架使用java。如何組合Box2d物體?

回答

2

身體的形狀正在由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)機制,但我想這不是你想要的這裏

2

是的,你可以通過以下步驟進行下面

有一個適合你的工作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); 
+0

最後一部分的目的是什麼?如果您已經設置了fixtureShape = chain,則將其分配給主體。 –

+0

最後一部分是與鏈狀分開的多邊形形狀。只要使用小代碼,您就可以瞭解其他形狀。 –

0

官方測試平臺的例子

我強烈建議你去GUI上的所有測試平臺的例子,直到你找到你要找的效果。

通過這樣做,我能夠找到下面的例子:每身體

這些例子非常簡單,並且隨着Box2D的發展將會得到支持。