David Amador からのこれら 2 つのサンプルを組み合わせようとしています。
http://www.david-amador.com/2010/03/xna-2d-independent-resolution-rendering/
http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/
マウス座標を取得するのに苦労していることを除けば、すべて正常に動作しています。個々のサンプルごとにそれらを取得できましたが、両方を考慮に入れるための私の計算は間違っているようです.
仮想解像度と通常の解像度が同じであれば、マウスの座標は正しいです。Resolution.SetVirtualResolution(1920, 1080) や Resolution.SetResolution(1280, 720, false) のようなことをすると、カメラを動かすと座標がゆっくりと同期しなくなります。
コードは次のとおりです。
public static Vector2 MousePositionCamera(Camera camera)
{
float MouseWorldX = (Mouse.GetState().X - Resolution.VirtualWidth * 0.5f + (camera.position.X) * (float)Math.Pow(camera.Zoom, 1)) /
(float)Math.Pow(camera.Zoom, 1);
float MouseWorldY = ((Mouse.GetState().Y - Resolution.VirtualHeight * 0.5f + (camera.position.Y) * (float)Math.Pow(camera.Zoom, 1))) /
(float)Math.Pow(camera.Zoom, 1);
Vector2 mousePosition = new Vector2(MouseWorldX, MouseWorldY);
Vector2 virtualViewport = new Vector2(Resolution.VirtualViewportX, Resolution.VirtualViewportY);
mousePosition = Vector2.Transform(mousePosition - virtualViewport, Matrix.Invert(Resolution.getTransformationMatrix()));
return mousePosition;
}
解決策として、これを追加しました:
virtualViewportX = (_Device.PreferredBackBufferWidth / 2) - (width / 2);
virtualViewportY = (_Device.PreferredBackBufferHeight / 2) - (height / 2);
それ以外はサンプルコードと同じです。前もって感謝します!