gpt4 book ai didi

java - 如何在java中旋转游戏中的图像?

转载 作者:行者123 更新时间:2023-11-30 02:31:25 25 4
gpt4 key购买 nike

我正在尝试在游戏中制作一个移动系统,玩家始终朝某个方向前进,他们可以通过按左右键来改变该方向。到目前为止我有这段代码:

public class Player 
{
private float x, y;
private int health;
private double direction = 0;
private BufferedImage playerTexture;
private Game game;

public Player(Game game, float x, float y, BufferedImage playerTexture)
{
this.x = x;
this.y = y;
this.playerTexture = playerTexture;
this.game = game;
health = 1;
}

public void tick()
{
if(game.getKeyManager().left)
{
direction++;
}
if(game.getKeyManager().right)
{
direction--;
}
x += Math.sin(Math.toRadians(direction));
y += Math.cos(Math.toRadians(direction));
}

public void render(Graphics g)
{
g.drawImage(playerTexture, (int)x, (int)y, null);
}
}

这段代码对于运动效果很好,但是图像不会像我希望的那样旋转以反射(reflect)方向的变化。我怎样才能使图像旋转,以便通常顶部始终指向“方向”(以度为单位的角度)?

最佳答案

您需要仿射变换来旋转图像:

public class Player 
{
private float x, y;
private int health;
private double direction = 0;
private BufferedImage playerTexture;
private Game game;

public Player(Game game, float x, float y, BufferedImage playerTexture)
{
this.x = x;
this.y = y;
this.playerTexture = playerTexture;
this.game = game;
health = 1;
}

public void tick()
{
if(game.getKeyManager().left)
{
direction++;
}
if(game.getKeyManager().right)
{
direction--;
}
x += Math.sin(Math.toRadians(direction));
y += Math.cos(Math.toRadians(direction));
}
AffineTransform at = new AffineTransform();
// The angle of the rotation in radians
double rads = Math.toRadians(direction);
at.rotate(rads, x, y);
public void render(Graphics2D g2d)
{
g2d.setTransform(at);
g2d.drawImage(playerTexture, (int)x, (int)y, null);
}
}

关于java - 如何在java中旋转游戏中的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com