我正在创建一个基本的2D游戏,并且当前正在尝试在旋转矩形时获取矩形所有角的x和y(点)。

private static Graphics2D drawRect(Graphics2D g)
{
    Rectangle rect = new Rectangle(350,350,75,75);
    AffineTransform transform = new AffineTransform();
    transform.rotate(Math.toRadians(rotation), rect.getX() + rect.width/2, rect.getY() + rect.height/2);
    AffineTransform old = g.getTransform();
    g.transform(transform);

    g.fill(rect);
    if(z >= 1000)
    {
        // here I am asking it to print out the x,y of the point at the top left of the rectangle
        System.out.println(rect.getX() + " : " + rect.getY() + " : " + rotation);
        z = 0;
    }
    g.setTransform(old);
    z++;
    return g;
}


当我运行它时,它从350、350开始,如图所示,并且将根据我如何增加它而朝任一方向旋转。它可以正确旋转图形。但是,当我要打印原始左上角点的x,y时,它总是返回350,350。如果我将它向正方向旋转45度,它将返回350,350。我做了一个click函数因此我可以在屏幕上单击,它会正确返回点击点的x和y。当我单击矩形的原始左上角时,它将返回311,334。这是在计算左上角x,y时要寻找的回报。
视觉在这里:

picture of before rotation

picture of after rotation

最佳答案

您正在将变换应用于图形对象。因此,矩形对象本身不会被修改。

AffineTransform有两种方法可以使用。 createTransformedShape返回一个新形状,该形状将相应地转换,或者transform(Point2D ptSrc, Point2D ptDst)将转换点ptSrc并将转换后的点保存在ptDst中:

Point rotatedPoint = new Point();
transform.transform(new Point(rect.x, rect.y), rotatedPoint);

关于java - 旋转时获取屏幕上矩形角的点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42197898/

10-12 02:12