【问题标题】:box2d Apply force in a particular directionbox2d 向特定方向施加力
【发布时间】:2014-12-27 23:36:59
【问题描述】:

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

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

【问题讨论】:

标签: iphone objective-c box2d


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      float mangnitude = anything;
      b2Vec2 forceDirection = body->GetWorldVector( b2Vec2(0,1) );
      
      forceDirection = magnitude * forceDirection;
      body->ApplyLinearImpulse(forceDirection, body->GetPosition(), true);
      

      【讨论】: