首页 > 解决方案 > 如何避免 pygame.FULLSCREEN 自动调整分辨率?

问题描述

我正在使用 pygame 创建一个需要方形屏幕 800x800 的应用程序。它在窗口化时工作正常,即当我简单地这样做时:

screen_width = 800
screen_height = 800
screen = pygame.display.set_mode((screen_width, screen_height))

或者

flags = NOFRAME
screen = pygame.display.set_mode((screen_width, screen_height), flags)

但是当我使用全屏标志时,我的游戏窗口会被拉伸到宽屏分辨率,使其成为非方形并且也被拉伸以适应全屏。我认为它正在做的是自动从支持的分辨率列表中选择最接近的分辨率:

print(pygame.display.list_modes())
[(1920, 1080), (1920, 1080), (1920, 1080), (1920, 1080), (1920, 1080), (1920, 1080), (1680, 1050), (1680, 1050), (1680, 1050), (1600, 900), (1600, 900), (1600, 900), (1440, 900), (1440, 900), (1440, 900), (1440, 576), (1440, 576), (1440, 576), (1440, 576), (1440, 480), (1440, 480), (1440, 480), (1440, 480), (1440, 480), (1400, 1050), (1400, 1050), (1400, 1050), (1366, 768), (1366, 768), (1366, 768), (1360, 768), (1360, 768), (1360, 768), (1280, 1024), (1280, 1024), (1280, 1024), (1280, 1024), (1280, 960), (1280, 960), (1280, 960), (1280, 800), (1280, 800), (1280, 800), (1280, 768), (1280, 768), (1280, 768), (1280, 720), (1280, 720), (1280, 720), (1280, 600), (1280, 600), (1280, 600), (1152, 864), (1152, 864), (1152, 864), (1152, 864), (1024, 768), (1024, 768), (1024, 768), (1024, 768), (800, 600), (800, 600), (800, 600), (800, 600), (720, 576), (720, 576), (720, 576), (720, 480), (720, 480), (720, 480), (640, 480), (640, 480), (640, 480), (640, 480), (640, 400), (640, 400), (640, 400), (512, 384), (512, 384), (512, 384), (400, 300), (400, 300), (400, 300), (320, 240), (320, 240), (320, 240), (320, 200), (320, 200), (320, 200)]

但我想做的是让窗口保持未拉伸,即保持与使用 pygame.NOFRAME 标志或无标志相同的大小,并保持方形(1:1 纵横比)。我需要它是全屏的,所以 800x800 窗口之外的区域只能是黑色区域。

我环顾四周,但找不到一种方法来避免 pygame 在全屏时所做的这种自动调整。我会很感激任何帮助。

标签: pythonpygamefullscreen

解决方案


在全屏模式下,你不需要使用NOFRAME,因为这个标志只是移除了顶栏,在全屏模式下是不可见的。

使用全屏时有多种选择:

  1. 缩放窗口使其占据整个屏幕,留下黑色区域以保持窗口比例。它看起来像这样:
screen = pygame.display.set_mode((800,800), FULLSCREEN|SCALED)


  1. 在窗口周围留下黑色区域。只需FULLSCREEN单独使用标志。

在这种情况下,根据您的平台,您的整个屏幕可以调整大小(第二张图片),也可以不更改;在这种情况下,窗口周围会有黑色边框(第一张图片)。

我认为您使用的平台更喜欢调整您的屏幕分辨率,以防止周围出现黑色边框,从而导致 PyGame 窗口(第二张图片)拉伸。如果是这种情况,那么更喜欢第一个解决方案,因为它还可以防止来自奇怪的分辨率更改的多个通知或问题。

有时您的系统总是会移除黑色边框,尤其是在 PyGame 2.0.x 中。在这种情况下,如果您仍然想要黑色边框,您可以使用此代码将它们添加回来。

screen = pygame.display.set_mode((800, 800), FULLSCREEN)

或者


  1. 您还可以使用此代码定义大小为您的屏幕分辨率的 PyGame 窗口:
size = pygame.display.Info()
screen = pygame.display.set_mode((size.current_w, size.current_h), FULLSCREEN)

推荐阅读