Java 旋转图像,使其面对另一个图像

Java 旋转图像,使其面对另一个图像,java,rotation,affinetransform,Java,Rotation,Affinetransform,我正在创建一个游戏,希望敌人在跟随玩家时面对玩家。我曾尝试以这种方式使用仿射变换: at = new AffineTransform(); angle = Math.atan2(player.getY() - y,player.getX() - x) + (Math.PI / 2); at.setToTranslation(x, y); at.rotate(angle, width / 2, height / 2); 然后使用g2D.drawImage(image,at,this)在屏幕上绘制

我正在创建一个游戏,希望敌人在跟随玩家时面对玩家。我曾尝试以这种方式使用仿射变换:

at = new AffineTransform();
angle = Math.atan2(player.getY() - y,player.getX() - x) + (Math.PI / 2);
at.setToTranslation(x, y);
at.rotate(angle, width / 2, height / 2);

然后使用
g2D.drawImage(image,at,this)在屏幕上绘制敌人。问题是,敌人只是面对屏幕上的一个随机位置,它确实会旋转以面对该点,但它不会像我希望的那样面对玩家。我在player类中使用了完全相同的代码,使玩家面对鼠标光标,然后它工作得很好,那么为什么它不适合面对玩家呢?

你的方法的一个问题是,你没有考虑敌人已经面对的角度(他的图像),他可以在同一角度(x,y)但有任何角度[0360]。所以你的轮换看起来是随机的,因为当你考虑到球员的时候,你并没有考虑到他自己的脸。你必须计算出他的图像所面对的角度,找出球员所面对的角度,然后根据这个角度旋转他


我建议为每个敌人/玩家
Enum-facing
(如果角度很少且有限)或
int-facing
添加一个字段,以保持其图像所面对的角度。

@andrewhompson是正确的。虽然你的问题略有不同(谈论的是面对玩家的敌人),但这与让图像X面对位置Y是同一个潜在问题。@DuncanJones我特别写道,面向鼠标光标的代码不适用于让玩家X和Y面对敌人的图像,也不适用于让敌人的图像面对玩家的位置。因为这个问题回答了如何让图像面对鼠标光标的问题,所以无法让敌人面对玩家。现在我的代码如下:
Vector2d position=newvector2d(playerX,playerY);Vector2d僵尸=新Vector2d(100100);Vector2d面向=新的Vector2d(0,-1);位置。子(僵尸);position.normalize();面向。规范化();at=新仿射变换();角度=位置。角度(朝向);角度=Math.atan2(playerY-y,playerX-x)+(Math.PI/2);at.setToTranslation(x,y);旋转角度(角度、宽度/2、高度/2)我看起来僵尸现在总是面对玩家的产卵地点,而不是玩家。我有一个线程中的代码,所以它应该一直更新。然后问题是playerX,playerY。它们不会更改(请尝试将它们打印到控制台)。你应该在player类getPlayerX(),getPlayerY()中为它们设置getter,这样你就可以将player对象传递给僵尸,他们就会随时知道玩家在哪里;playerX=player.getX();playerY=player.getY()到线程,但它仍然面向玩家生成