2016-04-17 15 views
0

複数のオブジェクトを回転させて一緒に回転させたいと思います。彼らは0度(まっすぐ向いている)である場合、彼らは良いですが、そうでないとき、それは次のようになります。JavaFX Canvasの複数のイメージで回転を同期させる方法

Wierdness

私が回転し、このコードを使用しています:

private void rotate(GraphicsContext gc, double angle, double px, double py) { 
    Rotate r = new Rotate(angle, px, py); 
    gc.setTransform(r.getMxx(), r.getMyx(), r.getMxy(), r.getMyy(), r.getTx(), r.getTy()); 
} 

private void drawRotatedImage(GraphicsContext gc, Image image, double angle, double tlpx, double tlpy) { 
    gc.save(); // saves the current state on stack, including the current transform 
    rotate(gc, angle, tlpx + image.getWidth()/2, tlpy + image.getHeight()/2); 
    gc.drawImage(image, tlpx, tlpy); 
    gc.restore(); // back to original state (before rotation) 
} 

私は使用する画像の配列を持っており、drawRotatedImageを1つの統一された角度で呼び出すことによって回転させます。すべての画像は32 x 32です。 イメージにこのシフトをどうやって解決できますか?

+0

は、問題を再現することはできません。私がテストすれば、コードはそれぞれの中心を中心に画像を回転させます。 – fabian

+0

@fabian 1度の変数があります。その変数を使用して表示される画像のリストがあります。それらはすべて32 x 32です。それらには指定する 'x'と' y'座標があります。私はそれらの座標でそれらを描画し、画像を回転させます。どのようにして全体を回転させることができますか? – theTechnoKid

答えて

1

単純にすべてのそれらのイメージのために同じ変換を使用して、グループとして画像を回転させる:

代わりの

gc.save(); 
gc.setTransform(new Affine(new Rotate(angle, image1CenterX, image1CenterY))); 
gc.drawImage(image1, image1X, image1Y); 
gc.restore(); 

gc.save(); 
gc.setTransform(new Affine(new Rotate(angle, image2CenterX, image2CenterY))); 
gc.drawImage(image2, image2X, image2Y); 
gc.restore(); 

... 

(あなたはそれぞれのdrawRotatedImageを呼び出す場合、何をやっているとします画像)

使用

gc.save(); 
gc.setTransform((new Affine(new Rotate(angle, rotationCenterX, rotationCenterY))); 

gc.drawImage(image1, image1unrotatedX, image1unrotatedY); 
gc.drawImage(image2, image2unrotatedX, image2unrotatedY); 
... 

gc.restore(); 
+0

'rotationCenterX'と' rotationCenterY'とは何ですか? – theTechnoKid

+0

それは働いて、ありがとう!私は開始xとyを 'rotationCenterX'と' rotationCenterY'として使いました。センターを使うのが良いでしょうか?それとも終わり? – theTechnoKid

+0

@theTechnoKid Uあなたの必要とするポイントはあなた次第です。ピボットポイント(=回転中心)として 'P =(x、y)'を使用すると、同じ効果が得られますあなたがペイントしたオブジェクトを '-P'で移動した場合と同様に、原点を中心に回転し、' P'で結果を移動します。回転中の位置を保持するポイントを決めるだけです(その場所に何かが描画されていると仮定します)。ピボットポイントのグリッド線の交点、グリッドフィールドの中心(imgsは90°の倍数で回転した後にグリッドフィールドに揃う)です。疑問がある場合は、グリッドの中心を使用します。 – fabian

関連する問題