1 つはゾンビ用、もう 1 つはゾンビが 10% の確率でスポーンするブレード用の 2 つの画像があります。ゾンビの右手と重なるように刃を配置したいです。ゾンビの高さが幅と同じであれば、これを行うことができますが、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 を指定すると、ブレードが適切に回転しなくなります。
では、ゾンビがどの角度を向いていても常に次の結果が得られるように、ブレードを常に適切に配置するにはどうすればよいでしょうか?