2016-02-27 2 views
2

У меня есть текстура, которая не является только коробкой или кругом, и мое тело должно быть таким же от этой формы, поэтому я думал объединить несколько тел для достижения желаемой формы, возможно ли это? или есть лучшие способы сделать это? Я использую java с платформой libgdx.Как комбинировать тела 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 =, а затем назначили ее телу. –

+0

последняя часть - многоугольник форма отдельный из цепь форма. при условии, что небольшой код, чтобы вы могли также узнать другую форму. –

0

Официальные примеры тестовых стендов

Я настоятельно рекомендую, что вы идете на всех примерах Testbed на GUI до тех пор, пока не найдете эффект, который вы ищете.

Поступая таким образом, я был в состоянии найти следующие примеры:

Эти примеры очень просты и будут поддерживаться по мере развития Box2D.

Смежные вопросы