2011-12-04 3 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. Pop-матрица

В коде, это было бы:

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

Вы также можете попробовать Graphics2D.rotate(theta, originX, originY);

Смежные вопросы