是否可以将Rectangle
物体绕其轴旋转一定程度?它和Rectangle rect = new Rectangle(x,y,w,h,r)
一样简单吗?
如果无法旋转物体,我会得到类似结果的方法吗?
编辑:为了清晰起见,这是我的困境,我有旋转的图像但是当它们与其他图像合并时,碰撞只能在90度和180度旋转时工作,因为它们的命中框矩形对象不会旋转。
答案 0 :(得分:2)
编辑:为了清楚起见,这是我的困境,我有旋转的图像,但当它们与其他图像合并时,碰撞只能在90度和180度旋转时工作,因为它们的命中框矩形对象不会旋转。
您可以使用AffineTransform方法createTransformedShape(...)
旋转Shape派生对象,例如Rectangle2D。
Rectangle2D myRect = new Rectangle2D.Double(100, 100, 200, 200);
AffineTransform at = AffineTransform.getRotateInstance(Math.PI / 4, 150, 150);
Shape rotatedRect = at.createTransformedShape(myRect);
注意:代码未编译也未经过测试。
答案 1 :(得分: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)
作为角度。
答案 2 :(得分:0)
还有另一种方法可以做到这一点(除createTransformedShape
之外),如果需要的话,可以创建更少的临时对象。
您可以使用Path2D
保留Path2D.transform(AffineTransform)
,然后使用what AffineTransform
actually does under the hood进行转换,而不是保留Rectangle2D
边框:
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.
}
// ...
}