繁体   English   中英

如何在Java中使用AffineTransform以及基于坐标的系统?

[英]How to use AffineTransform and also a cordinate based system in Java?

我一直在用Java开发游戏,该游戏具有基于旋转的运动(这意味着您要旋转才能旋转,并且只能沿旋转方向前进和后退)。 我几乎可以正常工作了,但是最后遇到了一个问题。 为了使用AffineTransform,请使用g2d.drawImage([image],[AffineTransform的名称],null); 这不允许输入放置角色的坐标,这意味着我不能在屏幕上移动角色,而只能旋转它。

如何转换播放器图像(以旋转它),然后通过在屏幕上设置的xPos和yPos变量将其正确放置在屏幕上?

如果有帮助,这是我的代码。

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

public class Player 
{
    imageLoader loader = new imageLoader();
    private BufferedImage player = loader.loadImage("/player.png");
    private BufferedImage rotater = loader.loadImage("/player.png");
    AffineTransform transform = new AffineTransform();

    public int xPos = 200;
    public int yPos = 200;
    public double degrees = 90.0;

    public Input input;

    public void render(Graphics g)  //SOMEWHERE IN THIS RENDER METHOD I HAVE TO ROTATE AND DRAW THE PLAYER TO THE SCREEN.
    {
        transform.setToIdentity();
        transform.translate(player.getWidth() / 2, player.getHeight() / 2);
        transform.rotate(Math.toRadians(degrees));
        transform.translate(-player.getWidth()/2, -player.getHeight()/2);

        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(player, transform, null);

        System.out.println("PLAYER_X = "+xPos+" | " + "PLAYER_Y " + yPos + " | " + "ROTATION " + degrees);
    }

    public void moveForward()
    {
        xPos += (int) (Math.sin(degrees * (Math.PI/180)) * 4);
        yPos += (int) (Math.cos(degrees * (Math.PI/180)) * -4);
    }
    public void moveBackward()
    {
        xPos -= (int) (Math.sin(degrees * (Math.PI/180)) * 4);
        yPos -= (int) (Math.cos(degrees * (Math.PI/180)) * -4);
    }
    public void rotateLeft()
    {
        degrees = degrees - 4;
    }
    public void rotateRight()
    {
        degrees = degrees + 4;
    }
}

非常感谢,我希望你们中的一个能帮助我。

瑞安·科克里(Ryan Corkery)

您已经有了在方法中旋转和平移(在特定位置绘制)的代码。 您的原始代码已经在坐标-width / 2,-height / 2处绘制了图像(因为图像绕其中心旋转,而不是绕其左上角旋转)

因此,只需添加需要在xPos,yPos上绘制的额外翻译即可:

    transform.translate(-xPos + player.getWidth() / 2, -yPos + player.getHeight() / 2);
    transform.rotate(Math.toRadians(degrees));
    transform.translate(xPos - player.getWidth()/2, yPos - player.getHeight()/2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM