gpt4 book ai didi

c# - 根据分辨率缩放屏幕上的所有 Sprite

转载 作者:行者123 更新时间:2023-12-03 23:31:37 24 4
gpt4 key购买 nike

我决定将我的游戏从窗口模式转移到全屏模式,这是我面临的第一个问题。我正在寻找一种根据屏幕分辨率调整所有 Sprite 大小的方法。我的背景现在在(0, 0)坐标,但我需要让它和所有 Sprite 以某种固定的纵横比(16:9 首选)进行缩放。并将它们调整为背景被拉伸(stretch)以填充屏幕的部分。而且不多也不少。

我查看了一些在线教程,但我真的无法理解他们使用的概念。你能解释一下你会怎么做吗?我使用 RenderTarget2D 阅读并将其传递给 spriteBatch.Begin()调用,有某种效果,但必须有更多的代码。

我不希望支持分辨率更改选项,而是使 Sprite 适应当前分辨率。

最佳答案

听起来你在说resolution independence .

总体思路是让您的游戏使用虚拟分辨率并按比例放大或缩小以适应屏幕的实际分辨率。

var scaleX = (float)ActualWidth / VirtualWidth;
var scaleY = (float)ActualHeight / VirtualHeight;
var matrix = Matrix.CreateScale(scaleX, scaleY, 1.0f);

_spriteBatch.Begin(transformMatrix: matrix);

例如,如果您的虚拟分辨率是 800x480,您只需渲染所有相对于此的 Sprite 。然后在渲染 Sprite 批处理之前,创建一个转换矩阵以传递到 Begin称呼。

您应该知道的另一件事是,您需要反向缩放鼠标/触摸输入坐标以在虚拟分辨率下处理它们。在 Update方法您可以像这样反向缩放鼠标位置:
var mouseState = Mouse.GetState(); // you're probably already doing this
var mousePosition = new Vector2(mouseState.X, mouseState.Y);
var scaledMousePosition = Vector2.Transform(mousePosition, Matrix.Invert(matrix));

然后你可以在你当前使用的所有地方使用缩放值 mouseState.XmouseState.Y .

如果要实现信箱或邮筒,它会变得更加复杂。查看 MonoGame.Extended 中的视口(viewport)适配器如果你想知道它是如何工作的。

关于c# - 根据分辨率缩放屏幕上的所有 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32301622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com