Origem do conjunto 2D da caixa

8

Estou tentando definir a origem de uma forma box2d. Por padrão, uma forma gira em torno do centro. Mas estou tentando fazê-lo girar à esquerda da forma. Como um relógio, por exemplo.

Já ouvi falar de coisas como o SetXForm, mas essa função nem parece existir. Estou usando C ++ apenas no caso de você precisar saber disso.

Agradecemos antecipadamente, qualquer ajuda é apreciada.


fonte

Respostas:

6

Existem dois tipos de formas e três maneiras de fazê-las no Box2D.

Um b2CircleShape sempre tem seu centro no centro do círculo. Se você deseja fazer um "círculo torto", deve fixar o círculo em outro objeto (por exemplo, um pequeno círculo dentro dele) com uma junta.

Um b2PolygonShape pode ser inicializado com SetAsBox. Por padrão, SetAsBox coloca a origem no meio do retângulo, mas você pode passar um b2Vec2 como o terceiro argumento para colocar a origem em outro lugar.

Um b2PolygonShape não caixa é inicializado com a origem nas coordenadas locais 0,0. Para criar uma forma que estenda apenas uma direção, por exemplo, à direita e para cima, basta especificar coordenadas como (0, 0), (0, 5), (5, 5), (5, 0), construindo a forma apenas ao longo das coordenadas locais que se movem para cima e para a direita (e na ordem de enrolamento no sentido anti-horário).

Lembre-se de que a origem da forma é sempre a coordenada local (0, 0). Se você tentar pensar nisso como "movendo a origem", apenas se confundirá - o que está fazendo é compensar os outros vértices em relação à origem.


fonte
2

Não importa, eu respondo a resposta. Aparentemente, no b2PolygonShape, quando você chama a função

SetAsBox ()

Há duas sobrecargas. E um deles é:

SetAsBox (meia largura, meia altura, centro, ângulo);


fonte