我正在创造一个游戏,并希望敌人在玩家跟随玩家时面对玩家。我试图以这种方式使用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);
在屏幕上绘制敌人。问题是敌人只是面对屏幕上的一个随机位置,它会旋转到面对那个点,但它不像我想要的那样面对玩家。我在播放器类中使用完全相同的代码使播放器面向鼠标光标然后它工作正常,那么为什么它不能用于面对播放器呢?
答案 0 :(得分:1)
你的方法的一个问题是你没有考虑敌人已经面对的角度(他的形象),他可以在同一个(x,y)但是有任何角度[0,360] 。因此,你的轮换似乎是随机的,因为当你考虑到玩家的同时旋转他时,你不会考虑到他自己的面孔来旋转他。你必须弄清楚他的图像面对的角度,找出玩家面对的角度,然后根据这个角度旋转他。
我建议为每个敌人/玩家Enum facing
(如果很少和有限的角度)或int facing
添加一个字段,以保持他们的图像所面对的角度。