好的,我们一直在处理我们正在处理的项目中的这个问题。
我们正在使用500 x 1000像素的基本分辨率,并且所有内容都按照该分辨率放置和移动。我们想要实现的是将基本分辨率缩放(同时保持纵横比)到实际分辨率,这可能是任何分辨率。我的意思是所有对象都被缩放(包括鼠标)。 它也应该全屏工作。
我们已尝试在Matrix.CreateScale()
方法中使用SpriteBatch.Begin()
,但它没有保留纵横比,也没有全屏工作。
我们真的很困惑将PreferredBackBufferWidth/Height
和Viewport.X/Y/Width/Height
值设置为何时以及何时。
如果有人能指出我们正确的方向或提供一些例子我们会很感激。
谢谢!
答案 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)。