XNA尺度分辨率,同时保持长宽比

本文关键字:分辨率 XNA | 更新日期: 2023-09-27 18:16:58

我们正在做的一个项目遇到了这个问题。

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

我们已经尝试在SpriteBatch.Begin()方法中使用Matrix.CreateScale(),但它没有保留长宽比,并且不能在全屏下工作。

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

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

谢谢!

XNA尺度分辨率,同时保持长宽比

假设你真的想把所有东西都缩放到新的分辨率,你可以把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)。