3

是否可以Rectangle围绕其轴将对象旋转到一定程度?就这么简单Rectangle rect = new Rectangle(x,y,w,h,r)吗?

如果无法旋转对象,我可以获得类似结果的方法是什么?

编辑:为了清楚起见,这是我的困境,我有旋转的图像,但是当它们与其他图像碰撞时,碰撞仅在 90 度和 180 度旋转时起作用,因为它们的命中框矩形对象不旋转。

4

3 回答 3

3

编辑:为了清楚起见,这是我的困境,我有旋转的图像,但是当它们与其他图像碰撞时,碰撞仅在 90 度和 180 度旋转时起作用,因为它们的命中框矩形对象不旋转。

您可以使用 AffineTransform 方法旋转 Shape 派生对象,例如 Rectangle2D 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

要旋转矩形,您需要给图形上下文一个AffineTransform用于旋转。这是一个例子:

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为边界框保留 a 外,您还可以保留 aPath2D然后进行转换,使用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 回答