box2d在特定方向施加力

Chr*_*ris 5 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());
Run Code Online (Sandbox Code Playgroud)

erk*_*diz 8

我现在不能尝试,但这样的事情应该这样做:

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


ifo*_*e2d 4

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

b2Vec2 forceDirection = body->GetWorldVector( b2Vec2(0,1) );
Run Code Online (Sandbox Code Playgroud)