3

Rectangle軸を中心にオブジェクトをある程度回転させることはできますか? それは簡単Rectangle rect = new Rectangle(x,y,w,h,r)ですか?

オブジェクトを回転させることができない場合、同様の結果を得るにはどうすればよいでしょうか?

編集:明確にするために、ここに私のジレンマがあります。回転する画像がありますが、他の画像と衝突すると、ヒットボックスの Rectangle オブジェクトが回転しないため、衝突は 90 度と 180 度の回転でのみ機能します。

4

3 に答える 3

3

編集:明確にするために、ここに私のジレンマがあります。回転する画像がありますが、他の画像と衝突すると、ヒットボックスの Rectangle オブジェクトが回転しないため、衝突は 90 度と 180 度の回転でのみ機能します。

AffineTransform メソッドを使用して、Rectangle2D などの Shape 派生オブジェクトを回転できますcreateTransformedShape(...)

Rectangle2D myRect = new Rectangle2D.Double(100, 100, 200, 200);
AffineTransform at = AffineTransform.getRotateInstance(Math.PI / 4, 150, 150);
Shape rotatedRect = at.createTransformedShape(myRect);

注: コードはコンパイルもテストもされていません。

于 2013-09-17T22:24:20.387 に答える
0

四角形を回転するには、グラフィック コンテキストにAffineTransformfor 回転を指定します。次に例を示します。

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    AffineTransform oldTransform = g2d.getTransform();
    g2d.setTransform(AffineTransform.getRotateInstance(radians);
    g2d.draw(rectangle);
    g2d.setTransform(oldTransform);
}

g2d.rotate(radians)回転にも使えます。

角度はラジアン単位でなければならないことに注意してください。度をラジアンに変換するdegrees * (Math.PI/180)には、角度に使用します。

于 2013-09-17T22:09:50.950 に答える
0

これを行う別の方法 ( 以外にcreateTransformedShape) もあり、それが望ましい場合は、作成される一時オブジェクトが少なくなります。

Rectangle2Dバウンディング ボックスの を保持する代わりに、 を保持してから、次Path2Dを使用してその場で変換を行うことができPath2D.transform(AffineTransform)ます。

import java.awt.geom.*;

public class Example {
    private final Path2D hitBox;

    public Example(Rectangle2D initialHitBox) {
        this.hitBox = new Path2D.Double(initialHitBox);
    }

    public void transform(AffineTransform tx) {
        path.transform(tx); // In-place transformation.
    }

    // ...
}

これは、内部で実際に行うことAffineTransformと非常によく似ています。

于 2017-07-08T14:00:41.693 に答える