1

マウス ジョイントを含む Box2d iphone アプリ (cocos2d を使用) があり、マウス ジョイントを使用するたびに、クリックしたポイントでオブジェクトに力が適用されます。オブジェクトの特定のポイント、たとえばオブジェクトの中心に常に力を適用する方法があるかどうか疑問に思っていました。その理由は、たとえばマウス ジョイントを使用してそれを拾うと、私の形状がボックスの場合、クリックした場所が上に向かうように回転するからです。オブジェクトの中心など、常にオブジェクトを拾いたいと思います。慣性減衰力を上げてみましたが、思ったような効果が得られませんでした。これが私の現在のコードです:

b2Vec2 locationWorld = b2Vec2(newtouch.x/PTM_RATIO, newtouch.y/PTM_RATIO);
b2MouseJointDef md;
md.bodyA = physicsLayer.groundBody;
md.bodyB = touchedObject.body;
md.target = locationWorld;
md.maxForce = 2000;

b2World* w = [physicsLayer getWorld];
mouseJoint = (b2MouseJoint*)w->CreateJoint(&md);

touchedObject は私が移動しているオブジェクトであり、その本体をプロパティとして保存します。このコードはそのままで問題なく動作しますが、厄介な回転が発生するだけです。

4

1 に答える 1

2

ターゲット ポイントをボックスの重心に変更できます。

md.target = touchedObject.body->GetWorldCenter();

これにより、ジョイントはボックスの中心を、タッチしたポイントではなく、指がある場所に引っ張るようになります。ただし、すでに回転している場合は回転を止めることはできません。そのため、ピンを中央に突き刺したままにするのではなく、ユーザーが実際に触れているように感じるために、ボディに角度のあるダンピングを使用することをお勧めします。それの:)

于 2013-01-11T07:46:24.743 に答える