Изображение не отображается в фиксированной позиции при повороте с помощью AffineTransform - PullRequest
0 голосов
/ 03 января 2012

У меня проблема с поворотом изображения в фиксированной позиции с помощью Graphcis2D и 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)?

1 Ответ

0 голосов
/ 03 января 2012

Вам нужно сначала перевести ваш объект, чтобы точка привязки (точка, вокруг которой вы хотите, чтобы он вращался) находилась в начале координат, выполнить вращение, а затем перевести его обратно.Поэтому, если вы хотите вращаться вокруг точки (50, 75), вы должны сделать следующее:

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

Я предполагаю, что ваш класс AffineTransform может накапливать преобразования.Если нет, вам понадобятся 3 разных преобразования.

...