XNA尺度分辨率同时保持纵横比?

时间:2015-10-09 10:16:43

标签: c# xna resolution xna-4.0

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

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

我们已尝试在Matrix.CreateScale()方法中使用SpriteBatch.Begin(),但它没有保留纵横比,也没有全屏工作。

我们真的很困惑将PreferredBackBufferWidth/HeightViewport.X/Y/Width/Height值设置为何时以及何时。

如果有人能指出我们正确的方向或提供一些例子我们会很感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

假设您真的想要将所有内容扩展到新分辨率,您只需将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);

在这种情况下,游戏宽度/高度为500x1000,屏幕宽度/高度将是实际分辨率(例如1920x1080)。