我有两张图片,一张是僵尸的图片,另一张是刀的图片,僵尸有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,否则刀片将无法正确旋转。
那么我该如何使刀片始终正确地定位,以便无论僵尸面对什么角度,它都始终产生以下结果?