1

そのため、画面上でドラッグして本体を更新し、世界にその位置を知らせることができるボール(スプライトサブクラス)があります。

問題は、ボールに触れている間(つまり、指で制御しているときに)ボールに力を加えると、スプライトの視覚的な位置を更新するために2つのコードが互いに競合することです。

ワールドステッパーは、物理学を追跡し、ボールの位置を更新しようとしています。ただし、タッチメソッドは、ボールのボディとグラフィックの位置も更新しようとしています。理想的には、触れられたときに、ボールに影響を与える物理学をすべて殺したいと思います。

では、これを統合するために正確に何をしようとすべきでしょうか?これは、衝突とフィルタリングの問題も引き起こしています。助けていただければ幸いです。ありがとう

4

2 に答える 2

1

ボールに正確な物理シミュレーションを持たせたいですか? そうでない場合は、このように b2body クラスの SetTransform メソッドをいつでも使用できます。

    CGPoint ballLocation = ;//use the touched location for this
    b2Vec2 vecBallLocation = b2Vec2(ballLocation.x / 32, ballLocation.y / 32);//calculate this on your own
    b2Body * ballBody = ;//replace this variable with your ball's b2Body;
    ballBody->SetTransform(vecBallLocation, ballBody->GetAngle());

ボール スプライトの位置を手動で設定しないでください。物理シミュレーションにお任せください。どのスプライトの位置を手動で設定し、どのスプライトが物理シミュレーションを使用して位置を更新するかを追跡する必要がある場合、コードは時間の経過とともに非常に厄介になります。この方法もはるかに簡単です。

于 2012-05-27T11:11:10.257 に答える
0

物理オブジェクトをドラッグするときは、物理ステップシミュレーションを実行する前に、その速度と角速度を0,0に設定します。また、物理オブジェクトの位置を一時的に取得してから、ステップしてからボディの位置を元に戻し、指をボディに移動して得たタッチドラッグオフセットを適用することもできます。

于 2012-05-26T10:35:41.560 に答える