| 
 | 
 
10鱼币 
 
- import pygame
 
 - import sys
 
 - import traceback
 
 - from pygame.locals import *
 
  
- def main():
 
 -     pygame.init()
 
 -     #颜色参数
 
 -     WHITE = (255, 255, 255)
 
 -     BLACK = (0, 0, 0)
 
 -     RED = (255, 0, 0)
 
 -     GREEN = (0, 255, 0)
 
 -     BLUE = (0, 0, 255)
 
  
-     #窗口尺寸
 
 -     #获取当前显示器的分辨率
 
 -     listmode = pygame.display.list_modes()
 
 -     if listmode:
 
 -         bg_size = width, height = listmode[0]
 
 -     else:
 
 -         bg_size = width, height = 1366, 768
 
 -     #背景所在位置
 
 -     position = [0, 0]
 
 -     
 
 -     #加载窗口
 
 -     screen = pygame.display.set_mode(bg_size)
 
 -     pygame.display.set_caption("侑发布新作")
 
 -     
 
 -     #加载图片
 
 -     background_image = pygame.image.load("images/background.png").convert_alpha()
 
 -     background_rect = background_image.get_rect()
 
  
 
 
-     #帧率设置
 
 -     clock = pygame.time.Clock()
 
 -     FPS = 60
 
 -     #是否全屏变量
 
 -     is_fullscreen = True
 
 -     running = True
 
  
-     while running:
 
 -         for event in pygame.event.get():
 
 -             if event.type == QUIT:
 
 -                 pygame.quit()
 
 -                 sys.exit()
 
  
-             if event.type == KEYDOWN:#键盘被按下
 
 -                 if  event.key == K_F11:
 
 -                     #如果此时是全屏,则切换为窗口,否则全屏
 
 -                     is_fullscreen = not is_fullscreen
 
 -                     if is_fullscreen:
 
 -                         bg_size = width, height = 800, 600
 
 -                         screen = pygame.display.set_mode(bg_size)
 
 -                         
 
 -                     else:
 
 -                         bg_size = width, height = listmode[0]
 
 -                         screen = pygame.display.set_mode(bg_size, FULLSCREEN | HWSURFACE)
 
 -                         
 
 -                 
 
 -             keys = pygame.key.get_pressed()
 
 -             if keys[pygame.K_a]:
 
 -                 # 处理左箭头按键
 
 -                 if position[0] <= 0:
 
 -                     position[0] += 10
 
 -             if keys[pygame.K_d]:
 
 -                 # 处理右箭头按键
 
 -                 if position[0] >= width - background_rect.width:
 
 -                     position[0] -= 10
 
 -             # 其他按键处理
 
 -         if position[0] > 0:
 
 -             position[0] = 0
 
 -         elif position[0] < width - background_rect.width:
 
 -             position[0] = width - background_rect.width
 
 -         
 
  
-                     
 
 -         #画背景
 
 -         screen.blit(background_image, position)
 
 -         pygame.display.flip()
 
 -         clock.tick(FPS)
 
  
 
 
 
- if __name__ == "__main__":
 
 -     try:
 
 -         main()
 
 -     except SystemExit:
 
 -         pass
 
 -     except:
 
 -         traceback.print_exc()
 
 -         pygame.quit()
 
 -         input()
 
 
  复制代码 
 
 
 
我的问题就和我的标题一样,这个是pygame特有的bug吗,我去论坛上找过其他用户的帖子,也有和我一样遇到这种情况的,到现在都没有解决 
  
您好!根据您提供的代码和描述,问题可能与退出全屏后窗口模式未正确设置有关。
这是一个  pygame 代码逻辑导致的问题,而不是  pygame 本身的 bug。
 
代码中出现以下问题:
 
1. 当切换到窗口模式时,您未正确清除 `FULLSCREEN | HWSURFACE` 的标志,导致图像显示异常。 
2. 变量 `position` 未正确初始化,运行可能会报错。 
3. 窗口尺寸切换逻辑可能存在错误。
 
以下是修正后代码的简化版本,修复了退出全屏导致画面缩在左上角的问题:
  
- import pygame
 
 - import sys
 
 - import traceback
 
 - from pygame.locals import *
 
  
- def main():
 
 -     pygame.init()
 
  
-     # 颜色参数
 
 -     WHITE = (255, 255, 255)
 
  
-     # 获取屏幕分辨率
 
 -     listmode = pygame.display.list_modes()
 
 -     if listmode:
 
 -         screen_size = listmode[0]
 
 -     else:
 
 -         screen_size = (1366, 768)
 
  
-     # 初始化窗口
 
 -     bg_size = (800, 600)
 
 -     screen = pygame.display.set_mode(bg_size)
 
 -     pygame.display.set_caption("侑发布新作")
 
 -     
 
 -     # 加载背景图片
 
 -     background_image = pygame.image.load("images/background.png").convert_alpha()
 
 -     background_rect = background_image.get_rect()
 
  
-     # 控制变量
 
 -     is_fullscreen = False
 
 -     clock = pygame.time.Clock()
 
 -     FPS = 60
 
  
-     running = True
 
 -     while running:
 
 -         for event in pygame.event.get():
 
 -             if event.type == QUIT:
 
 -                 pygame.quit()
 
 -                 sys.exit()
 
  
-             if event.type == KEYDOWN:
 
 -                 if event.key == K_F11:
 
 -                     # 切换全屏/窗口模式
 
 -                     is_fullscreen = not is_fullscreen
 
 -                     if is_fullscreen:
 
 -                         screen = pygame.display.set_mode(screen_size, FULLSCREEN)
 
 -                     else:
 
 -                         screen = pygame.display.set_mode(bg_size)
 
  
-         # 绘制背景
 
 -         screen.fill(WHITE)
 
 -         screen.blit(background_image, (0, 0))
 
 -         pygame.display.flip()
 
 -         clock.tick(FPS)
 
  
- if __name__ == "__main__":
 
 -     try:
 
 -         main()
 
 -     except SystemExit:
 
 -         pass
 
 -     except:
 
 -         traceback.print_exc()
 
 -         pygame.quit()
 
 -         input()
 
 
  复制代码 
修复的关键点如下:
- 确保在设置窗口模式时,只设置 `
- pygame.display.set_mode(bg_size)
 
  复制代码 `,不要包含多余的 `FULLSCREEN` 标志。 - 初始化 `position` 变量时,防止未定义错误。
 - 每次切换窗口模式后,重新加载正确的大小。
 
  
测试以上代码,如果还有问题,可以随时提出!
 
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。  
 
 
 |   
 
 
最佳答案
查看完整内容 
您好!根据您提供的代码和描述,问题可能与退出全屏后窗口模式未正确设置有关。
这是一个 pygame 代码逻辑导致的问题,而不是 pygame 本身的 bug。
代码中出现以下问题:
1. 当切换到窗口模式时,您未正确清除 `FULLSCREEN | HWSURFACE` 的标志,导致图像显示异常。
2. 变量 `position` 未正确初始化,运行可能会报错。
3. 窗口尺寸切换逻辑可能存在错误。
以下是修正后代码的简化版本,修复了退出全屏导致画面缩在 ... 
 
 
 
 
 
 
 |