0

境界内を移動するオブジェクトに力を加えるセンサーがあります。体がそのセンサーの中心に触れているかどうかを判断したいと思います。

オブジェクトがセンサーまたは別の物体の内部/接触しているかどうかは簡単に検出できますが、物体が特定のセンサーの中心にあるかどうかを確認する方法がわかりません。

編集: センサーは、実際にはこの質問で質問した渦です。オブジェクトがセンサーに触れている (または実質的にセンサー内またはセンサー上にある) 場合、センサーは自身の中点に向かって力を加えます。オブジェクトが中間点に当たったときに何かをしてもらいたいのですが、特定のボディがセンサーの境界に触れている/内側にあり、その中間点に触れているかどうかを確認する方法がわかりません。

(非常によく描かれた) 図では、青い円の下がセンサー、緑の円が本体、小さな青い点が中間点です。

ここに画像の説明を入力

更新: 最後に、センサーを中央に配置して確認しました。これが最も簡単な方法でした。

4

1 に答える 1

0

これでうまくいくと思います。

  1. センサーのワールド位置を、テストするボディのローカル ポイントに変換します。
  2. ボディのすべてのフィクスチャをループし、変換したローカル ポイントがフィクスチャ内にあるかどうかを確認します。
  3. 見つけたら壊しましょう。そうしないと、体の中心に触れていません。

私は 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;

}

ヒント: 既にセンサーに触れているボディのみをテストしてください。

于 2012-05-23T19:04:36.180 に答える