【问题标题】:XNA scale resolution while keeping aspect ratio?XNA 在保持纵横比的同时缩放分辨率?
【发布时间】:2015-10-09 19:17:05
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: c# xna resolution xna-4.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)。

    【讨论】:

    • 谢谢,会试试的。这不会影响性能吗?
    • 它是一个与任何其他着色器一样的后处理着色器。还有一个简单的。所以不,它应该对性能产生非常小的影响。没有什么明显的
    猜你喜欢
    • 2021-11-26
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多