|
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. 窗口尺寸切换逻辑可能存在错误。
以下是修正后代码的简化版本,修复了退出全屏导致画面缩在 ...
|