0

XNAにスプライトオブジェクトがあります。
サイズ、位置、回転があります。
画面座標からスプライト座標にポイントを変換するにはどうすればよいですか?
ありがとう、
SW

4

4 に答える 4

3

スプライトの変換行列を計算し、それを反転して(変換がワールド空間->ローカル空間から行われるようになります)、反転行列によってマウスの位置を変換する必要があります。

Matrix transform = Matrix.CreateScale(scale) * Matrix.CreateRotationZ(rotation) * Matrix.CreateTranslation(translation);

Matrix inverseTransform = Matrix.Invert(transform);
Vector3 transformedMousePosition = Vector3.Transform(mousePosition, inverseTransform);
于 2010-01-05T20:25:59.873 に答える
0

1つの解決策は、スプライトの元の回転していないバウンディングボックスに対してテストを行うことです。したがって、2D画面ベクトル(x、y)が与えられます。

  1. 2Dベクトルをローカルスプライト空間に変換します:(x、y)-(spritex、spritey)
  2. 逆スプライト回転を適用します
  3. バウンディングボックスに対してヒットテストを実行します

もちろん、スプライトの形状を考慮することで、ヒットテストをより正確にすることができます。

于 2009-12-17T09:26:11.217 に答える
0

次のXNAピッキングサンプルが役立つ場合があります。

http://creators.xna.com/en-us/sample/picking

于 2009-12-17T19:22:58.860 に答える
0

Containsのメソッドを使用するのと同じくらい簡単かもしれませんRectangle。長方形はスプライトのバウンディングボックスです。XNAではこの方法でドラッグアンドドロップを実装しました。Containsxとyが画面座標であることに基づくテストだと思います。

于 2009-12-17T18:46:35.407 に答える