1

I am currently trying to rotate an image and then drawing an image on top which isn't rotating. But whenever I use: g2d.rotate(Math.toRadians(rot), (x+15), (y+15)); every image I draw afterwards rotates as well. Is there any way I can rotate one image and not rotate the rest (gosh its really hard to explain). Here's my paint method:

public void draw(Graphics2D g2d)
{
    move();
    if(bo.px==+1)rot--;
    if(bo.px==-1)rot++;
    g2d.rotate(Math.toRadians(rot), (x+15), (y+15));
    g2d.drawImage(img, x, y, null);//this should rotate
    g2d.drawImage(shine, x, y, null);//this shouldn't
}

Thanks in advance.

chrypthic
  • 579
  • 1
  • 6
  • 15

2 Answers2

4

You can save the original transform, rotate and draw the first image and then apply back the original transform before drawing the second image.

Try

AffineTransform originalTransform = g2d.getTransform();
g2d.rotate(Math.toRadians(rot), (x+15), (y+15));
g2d.drawImage(img, x, y, null);
g2d.setTransform(originalTransform);
g2d.drawImage(shine, x, y, null);
Bala R
  • 107,317
  • 23
  • 199
  • 210
1

After you draw the rotated image you need to perform the inverse rotation to bring things back to the original non-rotated state.

public void draw(Graphics2D g2d)
{
    move();
    if(bo.px==+1)rot--;
    if(bo.px==-1)rot++;
    g2d.rotate(Math.toRadians(rot), (x+15), (y+15));
    g2d.drawImage(img, x, y, null);//this should rotate
    g2d.rotate(-Math.toRadians(rot), (x+15), (y+15)); // this resets the rotation!
    g2d.drawImage(shine, x, y, null);//this shouldn't
}
Miguel Grinberg
  • 65,299
  • 14
  • 133
  • 152