-1

我正在创建一个游戏,并希望敌人在跟随玩家时面对玩家。我曾尝试以这种方式使用 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);在屏幕上绘制敌人。问题是敌人只是面对屏幕上的一个随机位置,它确实会旋转以面对那个点,但它并没有像我想要的那样面对玩家。我在播放器类中使用完全相同的代码让播放器面对鼠标光标,然后它工作得很好,那么为什么它不能面对播放器呢?

4

1 回答 1

1

您的方法的问题之一是您没有考虑敌人已经面对的角度(他的图像),他可以在相同的 (x,y) 处但具有任何角度 [0,360]。所以你的轮换似乎是随机的,因为当你轮换他时考虑到球员,你轮换他时并没有考虑到他自己的面孔。你必须弄清楚他的图像面对的角度,找出玩家面对的角度,然后根据这个旋转他。

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

于 2013-04-22T12:55:48.533 回答