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 较低),因为僵尸会旋转以使其始终面向玩家我不能只更改数字47 表示 y,因为这样刀片将无法正常旋转。

那么如何使刀片始终正确定位,以便无论僵尸面向哪个角度,它始终会产生以下结果?

刀锋位置

4

1 回答 1

0

你可以有两个图像:

  • 一个没有刀片的 ( Img1)
  • one with the Blade ( Img2):获取僵尸和刀片,并在开始时将其合成,例如在构造函数中。

然后你可以说:

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

然后只需翻译/旋转/等。ZombieImg初始化之后。

你怎么看?:-)

于 2013-06-05T19:03:11.657 回答