XNA 缩放分辨率同时保持纵横比?

XNA scale resolution while keeping aspect ratio?

好的,我们正在处理的项目一直遇到这个问题。

我们正在使用 500 x 1000 像素的基本分辨率,并且一切都按照该分辨率放置和移动。我们想要实现的是将基本分辨率缩放(同时保持纵横比)到实际分辨率,这可能是任何东西。我的意思是所有对象都被缩放(包括鼠标)。 它也应该在全屏模式下工作。

我们已经尝试在 SpriteBatch.Begin() 方法中使用 Matrix.CreateScale(),但它无法保持宽高比并且无法在全屏模式下工作。

我们真的很困惑什么时候设置 PreferredBackBufferWidth/HeightViewport.X/Y/Width/Height 值。

如果有人能为我们指出正确的方向或提供一些示例,我们将不胜感激。

谢谢!

假设您真的只想将所有内容缩放到新分辨率,您可以将 500x1000 中的所有内容绘制到 RenderTarget2D,然后以您想要的任何分辨率将其绘制到实际图形设备。

但是请注意,这会拉伸图像,如果将其放大过大,很可能会使图像看起来很奇怪。但无论如何,这就是方法。

现在还可以正确翻译鼠标坐标:

var mouseState = Mouse.GetState();
var translatedX = mouseState.X * (game.Width / screen.Width)
var translatedY = mouseState.Y * (game.Height / screen.Height)
Vector2 gameMouseCoordinates = new Vector2(translatedX, translatedY);

在这种情况下,游戏 Width/Height 是 500x1000,屏幕 Width/Height 是实际分辨率(例如 1920x1080)。