如何在游戏编程中正确管理屏幕分辨率





5.00/5 (4投票s)
在游戏编程中正确管理屏幕分辨率
引言
几年前,很多 PC 显示器的宽高比是 4:3,你无法想象 16:9 或 16:10 显示器,以及今天出现的其他各种显示器。因此,当你发布一个游戏时,你会按照这个宽高比设计你的 GUI。如果你要提升屏幕分辨率,宽高比是相同的,并且没有任何问题。当等离子和 LCD 显示器出现并且移动设备越来越受欢迎时,情况变得有点复杂。如今,当你设计一个游戏时,你必须涵盖所有可能性,这意味着你的游戏必须支持(即使不是全部)你所能支持的最多屏幕分辨率。
你可能认为几乎任何设备都支持 640X480 (4:3 宽高比) 像素分辨率,并且在这种分辨率下设计的游戏可以在所有环境中运行,这可能是真的,但想象一下它在 24 英寸 16:9 宽高比显示器上的外观;此外,如今,LCD 显示器是最受欢迎的,它们只能在原生分辨率下看起来很好。本文提出了一个针对此问题的小解决方案。
首先让我们来看看当今最流行的屏幕分辨率
正如你所看到的,最流行的分辨率具有 4:3、16:9 和 16:10 的宽高比,因此如果你的游戏是针对这些设计的,它将覆盖很大一部分市场。你可能想知道,屏幕分辨率和宽高比如何会影响你的游戏开发;想象一下你全屏显示,并且你有一个非常好的显卡,你想利用当前屏幕分辨率来给你的游戏更多的清晰度。但是你有一个生命条、一个分数计量器,或者你可以从你的想象中得到的任何 2D 内容,这些 2D 内容需要基于像素的位置,你将其设计为 1024X768 (4:3),而当前的分辨率是 1600X1200 (4:3)。因此,如果你将其放置在屏幕上 100 像素高和 600 像素左侧,它将在任何地方显示,但如果使用当前分辨率,则会显示在预期位置之外。这里开始出现布局的想法,例如将你的整个 GUI 设计为最小 4:3 宽高比像素分辨率,即 640X480,并将所有 2D 内容的位置乘以一个数字,该数字是此分辨率与当前分辨率之间的关系;例如,如果一个按钮位于 60 像素顶部和 90 像素左侧,当你使用 1600X1400 (4:3) 的全屏分辨率时,你将顶部和左侧乘以 1600/640 = 2,5,你将获得此控件的像素位置,此操作也需要对宽度和高度进行。如果所有屏幕分辨率都具有 4:3 的宽高比,这是一个不错的解决方案,请注意,如果你的目标屏幕分辨率是 16:9,则无法这样做,因为 2D 内容将看起来被扩展,并且不会保持其宽高比。那么可以做什么?我花了很多时间才得出你在这里看到的结论。我玩了很多游戏,试图看看他们是如何解决这个问题的。
第一个,也是使用最多的,是设计一个居中的 GUI。这意味着所有 2D 内容都以某种方式居中于屏幕上,因此每个 2D 控件都相对于屏幕中心具有其相对位置。通过这种方式,你可以使用任何类型的屏幕分辨率来保持宽高比。对于这种方法,你只需要确保所有 2D 内容都可以在最低支持的分辨率下在屏幕上可见。我认为游戏《求生之路》第一部和第二部使用这种方法。
第二种方法是以 4:3 宽高比分辨率设计你的游戏,并用黑色填充未使用的空间(游戏《植物大战僵尸》使用它)。这就像在一个矩形中放置一个正方形,并用黑色填充矩形中未被正方形包含的空间。在这种情况下,包含所有可见区域的正方形被缩放以达到屏幕的高度。我有一个 23 英寸显示器,分辨率为 1920X1080,看起来是这样的
第三种方法,也是我想在这里解释的方法,是将你的 GUI 设计为 4:3、16:9 和 16:10 宽高比,以其使用的最小分辨率设计它,4X3 (800X600) 16X9 (1280X720) 和 16X10 (1280X800) 当游戏尝试全屏时,它会检查当前屏幕分辨率是否与这些宽高比中的任何一个匹配,其次尝试计算此宽高比的最小屏幕分辨率之间的比例,从而计算所需的布局。如果当前宽高比不受支持,则转到支持的分辨率列表并找到最受支持的分辨率。
重要的是要说这是我提出的方法。我没有读过任何关于此的文章,这个想法完全来自于解决个人问题的需要,有时人们更喜欢尝试思考和解决问题,然后看看其他人是如何解决它的。我希望收到人们的积极反馈,他们告诉我他们解决此问题的方法是什么。如果你认为这对你有用,请投票并在下方留下评论。谢谢!
历史
- 2011 年 12 月 2 日:初始版本