box2d在特定方向施加力

时间:2012-03-06 22:33:17

标签: iphone objective-c box2d

我想在我的对象当前面向的方向上施加一个力,这是我的代码到目前为止但是当我尝试做force * t时它会抛出错误,我做错了什么?

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

3 个答案:

答案 0 :(得分:8)

我现在无法尝试,但是应该这样做:

float magnitude=2.5f;
b2Vec2 force = b2Vec2(cos(spaceCraft->GetAngle()) * magnitude , sin(spaceCraft->GetAngle()) * magnitude);
spaceCraft->ApplyForce(force, spaceCraft->GetPosition());

答案 1 :(得分:3)

最简单的方法是在定义主体时查看对象“面对”的方向,并使用GetWorldVector查看它是如何更改的。例如,如果在创建主体时它直接朝上,则这将是方向(0,1)。然后你可以随时使用GetWorldVector来获取世界坐标中该向量的当前方向以应用力:

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

答案 2 :(得分:0)

您可以像IFORCE2D建议的那样尝试

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

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