旋转一张图片会导致其他图片循环旋转g2d.rotate

Rotating a picture causes rotation of other pictures in a loop g2d.rotate

我正在尝试制作类似 Tank Trouble 的游戏。

问题是当我尝试旋转并绘制坦克图片时,所有其他坦克图片都会旋转。

这是我的代码:

// draw tanks
ArrayList<Tank> tanks = new ArrayList<>();
tanks.addAll(TankTroubleMap.getAITanks());
tanks.addAll(TankTroubleMap.getUserTanks());
for (Tank tankToDraw : tanks) {
    g2d.rotate(-Math.toRadians(tankToDraw.getAngle())
            , tankToDraw.getCenterPointOfTank().getXCoordinate()
            , tankToDraw.getCenterPointOfTank().getYCoordinate());
    g2d.drawImage(tankToDraw.getTankImage()
            , (int) tankToDraw.getCenterPointOfTank().getXCoordinate() - Constants.TANK_SIZE / 2
            , (int) tankToDraw.getCenterPointOfTank().getYCoordinate() - Constants.TANK_SIZE / 2
            , Constants.TANK_SIZE, Constants.TANK_SIZE, null);
}

绘制完要旋转的图像后,只需将图形反向旋转即可。否则,相同的旋转将应用于您应用旋转点之后绘制的所有内容。

所以在你的情况下:

    for (Tank tankToDraw : tanks) {
        g2d.rotate(-Math.toRadians(tankToDraw.getAngle())
                , tankToDraw.getCenterPointOfTank().getXCoordinate()
                , tankToDraw.getCenterPointOfTank().getYCoordinate());
        g2d.drawImage(tankToDraw.getTankImage()
                , (int) tankToDraw.getCenterPointOfTank().getXCoordinate() - Constants.TANK_SIZE / 2
                , (int) tankToDraw.getCenterPointOfTank().getYCoordinate() - Constants.TANK_SIZE / 2
                , Constants.TANK_SIZE, Constants.TANK_SIZE, null);
        g2d.rotate(Math.toRadians(tankToDraw.getAngle())
                , tankToDraw.getCenterPointOfTank().getXCoordinate()
                , tankToDraw.getCenterPointOfTank().getYCoordinate());
    }

您应用于图形的任何变换(在本例中为旋转)都会保留,以用于您对该图形实例执行的所有未来操作,包括进一步的变换。使用图形时,您必须记住这一点。