Я использую Box2D, чтобы создать простую игру, и я хотел бы, чтобы добиться чего-то вроде этого:Box2D изменение угла круг сталкивается без перемещения круга
У меня есть круг с «стрелкой», указывающий на это текущий угол. При нажатии на клавиатуру угол увеличит значение, и угол круга изменится, как видно на втором рисунке ниже.
Начальное состояние круга, где угол окружности = 0. Линия указывает на 0 градусов.
Это следующее состояние круга после клавиатуры мыши от пользователя. Угол круга теперь составляет 15 градусов.
Чтобы сделать преобразование, я сделал что-то вроде этого:
void MyCirclecle::turnBall(float angle)
{
body_->SetTransform(body_->GetWorldPoint(b2Vec2(0,0)), body_->GetAngle() + (angle * b2_pi/180));
}
Круг вращается в правильном направлении, но круг движется одновременно. При каждом щелчке он будет двигаться немного вверх или вправо, а после 180 градусов он слегка сдвинется вниз или влево. В конце концов, после 360 градусов, он будет немного помещен поверх исходного состояния. Я также попытался использовать body_->GetWorldCenter()
и body_->GetPosition()
для первого параметра SetTransform
, но я все равно получаю то же самое. Есть ли способ, который я мог бы сделать, чтобы не перемещать круг, но может изменить угол, с которым он сталкивается?
Я думаю, проблема в том, что центр вашей сложной формы не является центром круга, а скорее центром формы, определяемой как по кругу, так и по линии. Попробуйте рисовать маркер в центре сложной формы. Вы пытались использовать револьверный сустав? –