изменить центр вращения box2d - PullRequest
0 голосов
/ 13 февраля 2011

У меня есть тело b2PolygonShape, и я прилагаю к нему силу.

_recbody-> ApplyForce (b2Vec2 (6.0, -6.0), _recbody-> GetWorldCenter ());

Я хочу изменить центр вращения тела, чтобы оно было больше впереди тела. Так что applyForce, а также столкновения заставляют тело не поворачиваться в центре, а больше вперед.

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Я знаю, что это довольно старый пост, но, основываясь на первом ответе, вместо использования SetAsBox (), вы должны использовать Set и определить вершины блока. Я обнаружил, что SetAtBox создает из центра в направлении всех четырех сторон, используя ширину и высоту, поэтому независимо от того, что вы делаете, центр тяжести будет центром фигуры, но, с другой стороны, если вы используете Set, даже если Вы просто рисуете прямоугольник, вы можете ограничить его только одной стороной.

Например:

int32 count = 4;
b2Vec2 vertices[] = {b2Vec2(sprite.contentSize.width/PTM_RATIO, 0.0f / PTM_RATIO),
b2Vec2(0.0f / PTM_RATIO,0.0f / PTM_RATIO),
b2Vec2(0.0f / PTM_RATIO, -sprite.contentSize.height/PTM_RATIO),
b2Vec2(sprite.contentSize.width/PTM_RATIO, -sprite.contentSize.height/PTM_RATIO),
  };
spriteShape.Set(vertices,count);

Это создаст форму с центром тяжести, смещенным в верхний левый угол, потому что мы рисовали только многоугольник с правой стороны, опускаясь вниз (ничего за точкой [0,0]).

0 голосов
/ 13 февраля 2011

Нашел это в этом форуме"Центр масс тела будет установлен из координат bodyDef.position.Set (), независимо от того, где вы создаете фактическую форму. Если вы смещаете boxDef.SetAsBox () координирует требуемую сумму, это должно получить желаемый эффект. "

...