我正在尝试制作类似《坦克麻烦》的游戏。
问题是,当我尝试旋转并绘制坦克图片时,所有其他坦克图片都会旋转。
这是我的代码:
// 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);
}
答案 0 :(得分:0)
绘制完要旋转的图像后,只需要将图形反向旋转回去即可。否则,相同的旋转将应用于在您对其施加旋转点之后绘制的所有内容。
所以在您的情况下:
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());
}
在图形实例上执行的所有将来操作(包括进一步的转换)都将保留您应用于图形的任何变换(在本例中为旋转)。使用图形时,您必须记住这一点。