You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:24:03