是否可以Rectangle
围绕其轴将对象旋转到一定程度?就这么简单Rectangle rect = new Rectangle(x,y,w,h,r)
吗?
如果无法旋转对象,我可以获得类似结果的方法是什么?
编辑:为了清楚起见,这是我的困境,我有旋转的图像,但是当它们与其他图像碰撞时,碰撞仅在 90 度和 180 度旋转时起作用,因为它们的命中框矩形对象不旋转。
编辑:为了清楚起见,这是我的困境,我有旋转的图像,但是当它们与其他图像碰撞时,碰撞仅在 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);
注意:代码未经编译或测试。
要旋转矩形,您需要给图形上下文一个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)
角度。
如果需要,还有另一种方法可以做到这一点(除了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.
}
// ...
}