1

AffineTransform を使用してタレットのバレルを変換していますが、バレルの先端から弾丸を発射したいと考えています。これらの座標を取得する方法はありますか、それとも手動で計算する必要がありますか?

変換のコード

AffineTransform rotate = AffineTransform.getRotateInstance(rotation, getX() + getWidth()/2, getY() + getHeight()/2);
barrel = rotate.createTransformedShape(new Rectangle(getX() + getWidth()/2, getY() - getHeight()/2, 2, getHeight()/2 + 1));

弾丸のコード

int dx = getX() - o.getX();
int dy = o.getY() - getY();
bullets.add(new Bullet((int)barrel.getBounds2D().getX(), (int)barrel.getBounds2D().getY(), SPEED, new NVector(dx, dy)));
4

2 に答える 2

2

同じ変換 ( rotate) を使用して、バレルの先端の座標を変換します。

rotate.transform(tipOfTheBarrel, transformedTipOfTheBarrel);
于 2012-12-21T08:37:28.083 に答える
0

バレルが回転した長方形の場合、弾丸はおそらく角の 1 つではなく、長方形の辺の中央から出てくるはずなので、それを使用することはできません。

ただし、独自の形状を作成し、弾丸が表示されるポイントが形状の最初にあることを確認した場合は、 を使用getPathIterator()して変換されたポイントを取得できます。

于 2012-12-21T09:06:20.607 に答える