问题描述
我正在制作一个 pygame 项目,遇到了一个问题,即当我退出全屏模式时,窗口会自动设置在屏幕的角落。通常,这不会成为问题,但它会将工具栏隐藏在屏幕外,从而无法拖动屏幕或调整其大小。我发现 pygame.display.toggle_fullscreen()
非常不可靠,而且每次使用时都会中断,因此我制定了自己的全屏切换方法:
import pygame,tkinter
fullscr = False
scrw,srch = tkinter.Tk().winfo_screenwidth(),tkinter.Tk().winfo_screenheight()
while True:
for event in pygame.event.get():
if event.type == pygame.KEYUP:
if event.key == pygame.K_F11:
if fullscr:
screen = pygame.display.set_mode((scrw,scrh),pygame.RESIZABLE)
screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
else:
screen = pygame.display.set_mode((980,720),pygame.RESIZABLE)
fullscr = not fullscr
对于那些好奇的人,我在将其设置为全屏之前将窗口设置为填满屏幕,因为窗口将保持其纵横比,从而破坏我的游戏并导致奇怪的故障。我已经知道 os.environ['SDL_VIDEO_CENTERED'] = '1'
是将屏幕居中的一种方式,但是在运行 pygame.init()
后这不起作用。有没有其他方法可以更改窗口位置,或者至少可以防止它在切换出全屏时将工具栏隐藏在屏幕外?
解决方法
这是一个 pygame 2 错误。
在github上有报道:https://github.com/pygame/pygame/issues/2360, 那里的作者意识到您现在可以通过调用 pygame.quit() 然后重新初始化以使 SDL_VIDEO_CENTERED 工作来解决此问题。
希望这会在 pygame 2.0.2 中得到修复。我在 https://github.com/pygame/pygame/pull/2460
为它编写了一个补丁