渲染旋转图像

发布于 2024-12-19 10:07:52 字数 1050 浏览 2 评论 0原文

为什么以下代码没有以一定角度渲染图像。 (我希望图像渲染在图像上的锚点上)。我认为它正在围绕屏幕旋转。我该如何解决这个问题?

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

Why is the following code not rendering the image at an angle.
(I want the image to be rendered on an anchored point on the image). I think that it is rotating around the screen. How can I fix this?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

べ繥欢鉨o。 2024-12-26 10:07:52

您应该使用这种工作方式:

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

You should use this way of working:

  1. Push the matrix
  2. Translate to the point of rotation
  3. Rotate
  4. Render at (0, 0)
  5. Pop matrix

In code, it would be:

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

You might also try Graphics2D.rotate(theta, originX, originY);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文