2011-10-08 2 views
1

현재 이미지를 회전시키고 회전하지 않는 이미지를 그려 넣으려고합니다. 하지만 내가 사용할 때마다 : g2d.rotate(Math.toRadians(rot), (x+15), (y+15)); 이후에 그릴 모든 이미지도 회전합니다. 하나의 이미지를 회전시키고 나머지는 회전시키지 않는 방법이 있습니까 (설명하기가 정말 힘듭니다). 내 페인트 방법은 다음과 같습니다.하나의 이미지를 다른 이미지로 회전

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 
} 

미리 감사드립니다.

답변

4

두 번째 이미지를 그리기 전에 원본 이미지를 저장하고 회전하여 첫 번째 이미지를 그린 다음 원본 변형을 다시 적용 할 수 있습니다.

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); 
아마
+0

와우 감사합니다. 내 문제가 해결되었습니다. +1 – chrypthic

1

회전 된 이미지를 그린 후에는 원래의 회전되지 않은 상태로 되돌리려면 역 회전을 수행해야합니다.

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 
} 
+0

간단 시도, 깨끗하고 간단하게 원래의 AffineTransform를 절약 발라의 방법을 수행하는 경향이 덜 오류가 발생했습니다. 발라에게 1+. –

관련 문제