旋转一张图片会导致其他图片循环旋转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());
}
您应用于图形的任何变换(在本例中为旋转)都会保留,以用于您对该图形实例执行的所有未来操作,包括进一步的变换。使用图形时,您必须记住这一点。
我正在尝试制作类似 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());
}
您应用于图形的任何变换(在本例中为旋转)都会保留,以用于您对该图形实例执行的所有未来操作,包括进一步的变换。使用图形时,您必须记住这一点。