スプライトがBox2Dボディからオフセットして表示されるのはなぜですか?


7

これについては、デバッグレンダラーを使用して確認しました。ゲームが始まると、すべてが順調です。しかし、衝突が発生すると、スプライトの回転はその本体よりもはるかに大きくなります。ボディが完全に水平の場合、スプライトとボディは一致します。

Box2Dボディのアウトラインをオーバーレイとして持つスプライト

スプライトの回転の原点は、本来あるべき場所から遠く離れているようです。これが私のコードです:

Sprite sprite = data.sprite;
position = body.getPosition();
sprite.setPosition(
    position.x - sprite.getWidth()  / 2,
    position.y - sprite.getHeight() / 2
);
sprite.setOrigin(position.x, position.y);
sprite.setRotation(MathUtils.radiansToDegrees * body.getAngle());

ご覧のとおり、回転の中心を設定しようとしてsetOriginも成功していません。どうすれば修正できますか?

回答:


9

ほとんどのAPIは、ワールド空間ではなくローカル空間でのSpriteの起源を表しています。これは、libgdxのドキュメントでサポートされています。

スプライトには、回転とスケーリングが実行される原点があります(つまり、原点は回転とスケーリングによって変更されません)。原点に対して与えられるスプライトの左下隅の位置

ですから、スプライトの中心を中心に回転させたい場合は、代わりに次の原点を使用する必要があると思います。

sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);

あなたは本当に速いです。あなたはsetOriginについて正しいです。それがトリックでした。どうもありがとう!ところで、setPositionステートメントは私のものでなければなりません。スプライトの位置にはコーナーポイントを設定する必要があります。
Tae-Sung Shin

@Paul問題に気づき、投稿を編集しましたが、あなたはすでにコメントしていました。:)一部のAPIでは、オリジンも変換に影響します(そのため、最初に別のsetPositionを作成しました)が、ドキュメントを確認したところ、libgdxには当てはまらないため、setPositionが正しいことがわかりました。
David Gouveia 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.