2011-12-04 160 views
3

爲什麼下面的代碼不能以某個角度渲染圖像。 (我想讓圖像在圖像上的錨點上呈現)。我認爲它在屏幕上旋轉。我怎樣才能解決這個問題?渲染旋轉圖像

public void drawWeapon(Graphics2D g) { 
    int iconSize = main.SOutput.iconSize; 
    int ePosX =(int) (getPosX() * iconSize 
       - (int) main.player.getPosX() *iconSize)/iconSize; 
    int ePosY =(int) (getPosY() * iconSize 
       - (int) main.player.getPosY() *iconSize)/iconSize; 

    int PosX = ePosX + (main.SOutput.resX/2)*iconSize 
       + main.SOutput.xPaddingSide; 
    int PosY = ePosY + (main.SOutput.resY/2)*iconSize 
       - getImageSizeY()*iconSize; 

    if (inventory[0][main.gui.itemSelected] != null){ 
    g.rotate(facingLeft?scincePressed:-scincePressed); 
    g.drawImage(inventory[0][main.gui.itemSelected].item.getImage(), 
       PosX + (facingLeft?0:getImageSizeX() * iconSize/2), PosY + 
       (getImageSizeY() * iconSize/2), getImageSizeX() * iconSize/2, 
       getImageSizeY() * iconSize/3, null); 
    g.rotate(facingLeft?-scincePressed:scincePressed); 
    } 
} 

回答

4

你應該使用這種工作方式:

  1. 推矩陣
  2. 轉換爲旋轉點
  3. 旋轉
  4. 渲染(0,0)
  5. 波普矩陣

在代碼中,這將是:

AffineTransform matrix = g.getTransform(); 
g.translate(originX, originY); 
g.rotate(angle); 
g.drawImage(0, 0, ...); 
g.setTransform(matrix); 

您也可以嘗試Graphics2D.rotate(theta, originX, originY);