我有两张图片,一张是僵尸,一张是刀片,僵尸有 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 较低),因为僵尸会旋转以使其始终面向玩家我不能只更改数字47 表示 y,因为这样刀片将无法正常旋转。
那么如何使刀片始终正确定位,以便无论僵尸面向哪个角度,它始终会产生以下结果?