box2d Применить силу в определенном направлении - PullRequest
5 голосов
/ 07 марта 2012

Я хочу применить силу к моему объекту в направлении, к которому он в данный момент обращен. Вот мой код, но он выдает ошибки, когда я пытаюсь сделать force * t, что я делаю неправильно?

        b2Transform t;
        t.Set(b2Vec2(0, 0), spaceCraft->GetAngle());
        b2Vec2 force = b2Vec2(0, 2.5f);
        spaceCraft->ApplyForce(force * t, spaceCraft->GetPosition());

Ответы [ 3 ]

8 голосов
/ 07 марта 2012

Я не могу попробовать прямо сейчас, но что-то подобное должно сделать это:

float magnitude=2.5f;
b2Vec2 force = b2Vec2(cos(spaceCraft->GetAngle()) * magnitude , sin(spaceCraft->GetAngle()) * magnitude);
spaceCraft->ApplyForce(force, spaceCraft->GetPosition());
3 голосов
/ 18 марта 2012

Самый простой способ - посмотреть, в каком направлении объект «смотрит», когда вы определяете тело, и использовать GetWorldVector, чтобы увидеть, как он изменился.Например, если вы создаете тело лицом вверх, это будет направление (0,1).Затем вы можете использовать GetWorldVector в любое время, чтобы получить текущее направление этого вектора в мировых координатах, чтобы применить силу:

b2Vec2 forceDirection = body->GetWorldVector( b2Vec2(0,1) );
0 голосов
/ 25 сентября 2014

Вы можете попробовать так, как предложил IFORCE2D

float mangnitude = anything;
b2Vec2 forceDirection = body->GetWorldVector( b2Vec2(0,1) );

forceDirection = magnitude * forceDirection;
body->ApplyLinearImpulse(forceDirection, body->GetPosition(), true);
...