我一直在工作于2D游戏的正确分辨率支持,并且想与大家分享一个干净的方法,确保在不同屏幕尺寸和分辨率下,Everything都能正确缩放。

这种设置将两种简单点子结合在一起:

  • 独立分辨率渲染 (在一个固定的内部分辨率下渲染游戏)
  • 缩放矩阵渲染 (将内部视图以干净的方式放大到实际屏幕大小)

这种方法使得支持多个分辨率变得更加容易,不用不断地为每个监视器调整游戏。

这个问题解决了什么

  • 在不同分辨率下保持游戏播放与UI的一致性
  • 允许你设计在一种固定的内部分辨率下(例如1280x720)
  • 精确放大到1080p、1440p、超宽画幅等其他分辨率下
  • 避免手动编写不同显示器下的位置和大小
  • 支持以像素对齐放大或等比例放大,取决于游戏

一般方法

  1. 选择一个固定 虚拟分辨率 例子:1280x720
  2. 使用这个内部分辨率对游戏进行渲染
  3. 根据实际屏幕/缓冲区大小计算一个 缩放矩阵
  4. 使用这个矩阵进行绘制
  5. 将游戏播放、布局和UI保持在虚拟坐标系下,渲染端来处理缩放

这样一来,你的游戏逻辑就不再依赖于分辨率,同时也能在干净的方式下支持全屏幕、窗口调整大小和不同的画幅。