Рендеринг повернутых изображений - PullRequest
3 голосов
/ 04 декабря 2011

Почему следующий код не отображает изображение под углом.(Я хочу, чтобы изображение отображалось в закрепленной точке на изображении).Я думаю, что он вращается вокруг экрана.Как я могу это исправить?

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);
    }
}

1 Ответ

4 голосов
/ 04 декабря 2011

Вы должны использовать этот способ работы:

  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);

...