web-dev-qa-db-ja.com

libgdxのイメージアクターを中間点で回転させる方法は?

私が正しく理解していれば、LibGDXはaddActionsメソッドを使用して画像を回転させています。

this.addAction( parallel(rotateBy(360, 0.5f), moveTo(320, 100, 0.5f)));

つまり、画像のpoint =(0,0)によって回転しているということです。

これが私の質問です:

オブジェクトの中心点画像を回転する方法はありますか?真ん中に固定して、車のホイールのように回すようなものですか? rotateByrotateToメソッドは、画像自体の(0,0)ポイントでそれを回転させます。

19
Peter Poliwoda

アクターの「原点」を正しく設定する必要があります。 Actor APIから、原点が位置を基準にしており、スケールと回転に使用されていることがわかります。

したがって、中間点を計算し、原点を中間点に設定します。

Actor a;
....
a.setOrigin(a.getWidth()/2, a.getHeight()/2);
30
aacotroneo

Libgdxでアクターを回転させる簡単な方法は次のとおりです。

まず、原点を設定する必要があります。

img.setorigin(width/2,hieght/2);

これで、必要に応じて時計回りと反時計回りに回転できます。

img.rotate(2f);

または

img.rotate(-2f);
4
Sudhir singh

最も簡単な方法は、0,0ポイントが中心になるようにオブジェクトを移動し、回転させてから、元の位置に移動することです。私はlibGDXに精通していませんが、3つの変換を集約する方法があるはずです。つまり、1つの集約された変換のみをオブジェクトに適用します。変換を集約する順序が違いを生むことを覚えておいてください。

まったく同じ結果が得られるはるかに複雑な方法では、回転によって作成されたオフセットの量を計算し、画像を原点に戻す必要があります。このようにしないでください。 3つの単純な変換を組み合わせることは、進むべき方法であり、変換を使用する最も良い理由の1つです。

**編集 [〜#〜] api [〜#〜] Actorオブジェクトにはtranslate()メソッドがあります。これを使用して、0,0ポイントが中央になるように画像をシフトします。擬似コードで;

x = this.getX();
y = this.getY();
cx = this.getWidth() * .5;
cy = this.getHeight() * .5;
this.translate(-(x+cx), -(y+cy)); // move so 0,0 is the centre of the Actor object
this.rotate(thisMuch);  // rotate the Actor
this.translate((x+cx), (y+cy)); // move it back to its original location

これにより、オブジェクトがその中心点を中心にその場で回転します。複雑に見えますが、実際にはかなり効率的です。これらのメソッドを駆動する行列(変換)を直接操作できる場合はさらにそうです。

4
Matt Stevens

原点を設定するために私が見つけた最も簡単で最短の方法は、次のように呼び出すことです。

Actor a;

...

a.setOrigin(Align.center);
3
Amit Kotlovski