XNA尺度分辨率,同时保持长宽比
本文关键字:分辨率 XNA | 更新日期: 2023-09-27 18:16:58
我们正在做的一个项目遇到了这个问题。
我们正在使用500 × 1000像素的基本分辨率,并且所有东西都是根据该分辨率放置和移动的。我们想要实现的是将基本分辨率缩放(同时保持长宽比)到实际分辨率,这可能是任何东西。我的意思是,所有对象都是缩放的(包括鼠标)。它也应该在全屏下工作。
我们已经尝试在SpriteBatch.Begin()
方法中使用Matrix.CreateScale()
,但它没有保留长宽比,并且不能在全屏下工作。
我们真的很困惑PreferredBackBufferWidth/Height
和Viewport.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);
在本例中,游戏宽度/高度为500x1000,屏幕宽度/高度为实际分辨率(例如1920x1080)。