2012-01-03 32 views
0

使用Graphcis2D和AffineTransform在固定位置旋轉圖像時出現問題。使用AffineTransform旋轉圖像時未將圖像繪製到固定位置

想法是根據身體的旋轉旋轉圖像。

當圖像的旋轉角度與身體的旋轉角度相匹配時,旋轉正確發生。但是,隨着旋轉的發生,圖像不會被繪製到與繪製身體相同的位置。該方法畫的畫的代碼如下:

public void paintPicture(Graphics g, Body body) { 

    Graphics2D g2 = (Graphics2D) g; 

    Vector2f[] vertices = ((Box) body.getShape()).getPoints(body.getPosition(), body.getRotation()); 

    Vector2f topLeftCorner = vertices[0]; 

    AffineTransform oldTransform = g2.getTransform(); 

    AffineTransform at = new AffineTransform(); 

    at.rotate(body.getRotation()); 

    g2.setTransform(at); 

    g2.drawImage(this.img, (int) topLeftCorner.x, (int) topLeftCorner.y, null); 

    g2.setTransform(oldTransform); 
} 

任何想法可能會導致圖像的運動,而不是根據座標(topLeftCorner.x,topLeftCorner.y)繪製了嗎?

回答

0

您需要首先翻譯您的對象,以便錨點(您希望它旋轉的點)位於原點,執行旋轉,然後將其翻譯回來。所以,如果你想繞點(50,75)旋轉,你會做到以下幾點:

at.translate (-50, -75); 
at.rotate (body.getRotation()); 
at.translate (50, 75); 

我假設你的AffineTransform類可以累積轉換。如果不是,則需要3種不同的轉換。