Pygame开发平台游戏时天空图片无法显示问题求助
问题解决:Pygame图片不显示、黑屏问题
核心错误:缩进逻辑错误
你的代码里pygame.display.update()和self.clock.tick(60)写在了while True循环的外部,导致游戏循环无法执行画面更新和帧率控制,最终呈现黑屏。
修复后的完整代码
import sys import pygame class Game: def __init__(self): pygame.init() pygame.display.set_caption('Shadow samurai') self.screen = pygame.display.set_mode((1200,800)) self.clock = pygame.time.Clock() # 新增异常捕获,快速排查图片路径/加载问题 try: self.img = pygame.image.load('assets/sky.png').convert() # 加convert()提升渲染效率 except pygame.error as e: print(f"图片加载失败: {e}") sys.exit() self.img_pos = (160, 260) self.movement = [False, False] def run(self): while True: # 先填充背景色,避免画面残留残影 self.screen.fill((0, 0, 0)) self.screen.blit(self.img, self.img_pos) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: self.movement[0] = True if event.key == pygame.K_DOWN: self.movement[1] = True # 补充KEYUP事件,解决按键持续触发的问题 if event.type == pygame.KEYUP: if event.key == pygame.K_UP: self.movement[0] = False if event.key == pygame.K_DOWN: self.movement[1] = False # 根据移动状态更新图片位置 if self.movement[0]: self.img_pos = (self.img_pos[0], self.img_pos[1] - 5) if self.movement[1]: self.img_pos = (self.img_pos[0], self.img_pos[1] + 5) # 这两行必须放在循环内部,确保每帧都更新画面 pygame.display.update() self.clock.tick(60) Game().run()
额外优化说明
- 给图片加载添加
convert()方法,让Pygame转换图片为适配渲染的格式,提升运行性能。 - 异常捕获能快速定位路径错误(比如
assets文件夹是否存在、图片名称拼写是否正确)。 - 补充KEYUP事件处理,避免按下方向键后图片持续移动的问题。
- 每帧先填充背景色,防止图片移动后留下残影。
内容的提问来源于stack exchange,提问作者未来の天才侍Tensai
相关产品推荐
相关产品推荐

