Rotating one image under another one

2019-03-02 18:03发布

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.

2条回答
Summer. ? 凉城
2楼-- · 2019-03-02 18:11

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);
查看更多
Viruses.
3楼-- · 2019-03-02 18:28

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
}
查看更多
登录 后发表回答