PyGame运行无报错但窗口无法打开,对应代码问题如何解决?
问题原因及修复方案
核心错误
- 你将
pygame的主事件循环写在了窗口创建代码的前面,程序启动后直接进入死循环,永远不会执行到py.display.set_mode()等创建窗口、渲染内容的代码,因此没有窗口弹出也不会触发报错。 - 其余逻辑问题:
- 画面填充、玩家绘制、屏幕刷新的代码全部放在主循环外,就算调整了循环位置,也只会执行一次渲染,后续不会更新画面
- 玩家横坐标
playerx = 889超过了你设置的800像素窗口宽度,玩家会被绘制到窗口外不可见 - 主循环中没有控制帧率,会导致程序无意义占用过高CPU
修正后可运行代码
# Modules import pygame as py # initialize py.init() # 窗口基础设置放在循环前面 # screen screen = py.display.set_mode((800,600)) # title py.display.set_caption("Shooter") # icon icon = py.image.load("shooting-game.png") py.display.set_icon(icon) # player icon2 = py.image.load("clipart1504254.png") playerx = 300 # 调整到窗口可视范围内 playery = 493 def draw_player(): screen.blit(icon2, (playerx, playery)) # 帧率控制 clock = py.time.Clock() # gameloop 放在所有初始化代码之后 running = True while running: # 事件处理 for event in py.event.get(): if event.type == py.QUIT: running = False # 每一帧的渲染逻辑放在循环内 # bg screen.fill((252,0,0)) # 绘制玩家 draw_player() # 刷新屏幕 py.display.update() # 控制帧率为60帧 clock.tick(60) # 退出时释放资源 py.quit()
内容的提问来源于stack exchange,提问作者BrokeLol
相关产品推荐
相关产品推荐

