如何避免pygame.FULLSCREEN自动调整分辨率?
How to avoid automatic resolution adjustment by pygame.FULLSCREEN?
我正在使用 pygame 创建需要方形屏幕 800x800 的应用程序。它在 windowed 时工作正常,即当我只是这样做时:
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)
但是当我使用全屏标志时,我的游戏 window 被拉伸到宽屏分辨率,使其成为非正方形并且还被拉伸以适应全屏。我认为它正在做的是自动从支持的分辨率列表中选择最接近的分辨率:
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)]
但我希望它做的是 window 保持未拉伸,即保持与使用 pygame.NOFRAME 标志或不使用标志时相同的大小,并保持正方形(纵横比为 1:1)。我需要它是全屏的,所以 800x800 window 之外的区域只能是黑色区域。
我环顾四周,但找不到避免 pygame 在全屏时进行的这种自动调整的方法。如果有任何帮助,我将不胜感激。
在全屏模式下,您不需要使用NOFRAME
,因为这个标志只是删除了在全屏模式下不可见的顶部栏。
使用全屏时有多种选择:
- 缩放 window 使其占据整个屏幕,留下黑色区域以保持 window 比例。它看起来像这样:
screen = pygame.display.set_mode((800,800), FULLSCREEN|SCALED)
- 在 window 周围留下黑色区域。只需单独使用
FULLSCREEN
标志。
在这种情况下,根据您的平台,您的整个屏幕可以调整大小(第二张图片),也可以不更改;在这种情况下,window(第一张图片)周围会有黑色边框。
我认为您使用的平台更愿意调整您的屏幕分辨率,以防止周围出现黑色边框,从而导致拉伸 PyGame window(第二张图片)。如果是这种情况,那么更喜欢第一个解决方案,因为它还可以防止奇怪的分辨率更改引起的多个通知或问题。
有时您的系统总是会去除黑边,尤其是在PyGame 2.0.x中。在这种情况下,如果您仍然想要黑色边框,可以使用 this code 将它们添加回来。
screen = pygame.display.set_mode((800, 800), FULLSCREEN)
或
- 您也可以使用此代码定义一个 PyGame window 其大小是您的屏幕分辨率:
size = pygame.display.Info()
screen = pygame.display.set_mode((size.current_w, size.current_h), FULLSCREEN)
我正在使用 pygame 创建需要方形屏幕 800x800 的应用程序。它在 windowed 时工作正常,即当我只是这样做时:
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)
但是当我使用全屏标志时,我的游戏 window 被拉伸到宽屏分辨率,使其成为非正方形并且还被拉伸以适应全屏。我认为它正在做的是自动从支持的分辨率列表中选择最接近的分辨率:
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)]
但我希望它做的是 window 保持未拉伸,即保持与使用 pygame.NOFRAME 标志或不使用标志时相同的大小,并保持正方形(纵横比为 1:1)。我需要它是全屏的,所以 800x800 window 之外的区域只能是黑色区域。
我环顾四周,但找不到避免 pygame 在全屏时进行的这种自动调整的方法。如果有任何帮助,我将不胜感激。
在全屏模式下,您不需要使用NOFRAME
,因为这个标志只是删除了在全屏模式下不可见的顶部栏。
使用全屏时有多种选择:
- 缩放 window 使其占据整个屏幕,留下黑色区域以保持 window 比例。它看起来像这样:
screen = pygame.display.set_mode((800,800), FULLSCREEN|SCALED)
- 在 window 周围留下黑色区域。只需单独使用
FULLSCREEN
标志。
在这种情况下,根据您的平台,您的整个屏幕可以调整大小(第二张图片),也可以不更改;在这种情况下,window(第一张图片)周围会有黑色边框。
我认为您使用的平台更愿意调整您的屏幕分辨率,以防止周围出现黑色边框,从而导致拉伸 PyGame window(第二张图片)。如果是这种情况,那么更喜欢第一个解决方案,因为它还可以防止奇怪的分辨率更改引起的多个通知或问题。
有时您的系统总是会去除黑边,尤其是在PyGame 2.0.x中。在这种情况下,如果您仍然想要黑色边框,可以使用 this code 将它们添加回来。
screen = pygame.display.set_mode((800, 800), FULLSCREEN)
或
- 您也可以使用此代码定义一个 PyGame window 其大小是您的屏幕分辨率:
size = pygame.display.Info()
screen = pygame.display.set_mode((size.current_w, size.current_h), FULLSCREEN)