如何确定box2d机身是否接触到传感器的中心?

时间:2012-05-23 18:33:24

标签: objective-c cocos2d-iphone box2d

我有一个传感器,它将力施加到在其边界内移动的物体上。我想确定身体是否接触到传感器的中心。

我可以很容易地检测物体是否在内部/接触传感器或其他物体,但我不确定如何检查物体是否位于给定传感器的中心。

编辑:传感器实际上是我在this question中询问过的一个漩涡。当物体接触(或实际上在或在传感器上)时,它会向其自身的中点施加力。当物体到达中点时,我希望它们做某事,但我不确定如何检查给定的物体是否接触/在传感器的边界内并触及其中点。

在下面的(非常精心绘制的)图中,蓝色圆圈是传感器,绿色圆圈是身体,小蓝点是中点。

enter image description here

更新:最后我将传感器放在中间并检查 - 这是最简单的方法。

1 个答案:

答案 0 :(得分:0)

我认为这会奏效。

  1. 将传感器的世界位置转换为您要测试的身体的本地点。
  2. 遍历身体的所有灯具,检查您转换的本地点是否在夹具中。
  3. 如果你找到一个,请休息。否则它不会碰到身体的中心。
  4. 我在Objective-C方面不擅长,所以我将用C ++编写一个代码示例:

    bool checkForTouchingCenter(b2Body *sensorBody, b2Body *bodyToTest)
    {
    
        b2Vec2 sensorPosition = sensorBody->GetPosition();
        b2Vec2 localPosition = bodyToTest->GetLocalPoint(sensorPosition);
    
        // An AABB check would be nice here, unless you test only the bodies that
        // are already touching the sensor.
    
        for (b2Fixture *fixture = bodyToTest->GetFixtureList(); fixture != 0; fixture = fixture->GetNext())
        {
            if (fixture->TestPoint(localPosition))
            {
                return true;
            }
        }
        return false;
    
    }
    

    提示:仅测试已接触传感器的物体。