将一张图片放置在旋转图片中

3

我有两张图片,一张是僵尸的图片,另一张是刀的图片,僵尸有10%的几率会生成带有刀的图片。我想把刀放在僵尸的右手上方重叠。如果僵尸的宽高相等,那么我可以做到这一点,但因为它的大小是62x55,所以一切都变得更加复杂了。当前用于定位刀和僵尸的代码如下:

at = new AffineTransform();
angle = Math.atan2(player.getY() - zombie.getY(), player.getX() - zombie.getX()) + (Math.PI / 2);
at.setToTranslation(zombie.getX(), zombie.getY());
at.rotate(angle, zombie.getWidth() / 2, zombie.getHeight() / 2);
g2d.drawImage(zombie.getBrImage(),at,this);
ImageIcon ii = new ImageIcon("Blade.png");
Image image = ii.getImage();
int x = (int) Math.round(zombie.getX() + 47 * Math.sqrt(2) * Math.cos(angle - Math.PI / 4));
int y = (int) Math.round(zombie.getY() + 47 * Math.sqrt(2) * Math.sin(angle - Math.PI / 4));
at.setToTranslation(x, y);
at.rotate(angle, zombie.getWidth() / 2, zombie.getHeight() / 2);
g2d.drawImage(image, at, this);

这将产生以下结果:
如您所见,刀片的位置比应该更高的y(如果您将0视为屏幕顶部,则y更低),因为僵尸会旋转以始终面向玩家,所以我不能只更改y的数字47,否则刀片将无法正确旋转。
那么我该如何使刀片始终正确地定位,以便无论僵尸面对什么角度,它都始终产生以下结果?

僵尸旋转多少度? - Will
你能贴更多的代码吗? - Will
“47”这个数字是用来做什么的?即使它通常是一个常量,使用变量使得代码更易读和更改也是非常有用的。 - peter.murray.rust
@peter.murray.rust 它将刀片的x和y位置与僵尸左上角相距47像素。 - Java Programmer
1个回答

0

你可以有两张图片:

  • 一张没有刀片的(Img1
  • 一张有刀片的(Img2):将僵尸和刀片合成在一起,例如在构造函数中。

然后你只需要这样说:

if (randomValue < 0.10) { zombieImg = Img1 } else { zombieImg = Img2}

然后在初始化之后,只需对ZombieImg进行翻译/旋转等操作。

你觉得呢?:-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接