20

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

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

つまり、画像のpoint =(0,0)だけ回転してい ます。

これが私の質問です:

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

4

4 に答える 4

31

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

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

Actor a;
....
a.setOrigin(a.getWidth()/2, a.getHeight()/2);
于 2012-12-18T13:48:39.680 に答える
5

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

Actor a;

...

a.setOrigin(Align.center);
于 2017-06-05T11:18:32.123 に答える
4

最も簡単な方法は、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

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

于 2012-12-17T20:49:07.780 に答える
4

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

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

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

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

img.rotate(2f);

また

img.rotate(-2f);
于 2014-05-20T06:15:29.220 に答える