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

Python pygame项目游戏结束时如何正常播放指定音效

问题原因

pygame的Sound.play()是异步调用,触发播放指令后程序会立刻执行后续代码,不等音效播放完成。你触发胜利条件后程序直接进入退出逻辑,pygame资源被销毁,音效自然来不及播放。你之前用sleep失败是因为sleep会阻塞线程,pygame的事件队列得不到处理,音效播放的相关事件无法被调度执行,还会导致窗口被系统标记为未响应。


解决方案

1. 提前预加载音效资源

不要在触发胜利条件时才加载音效,避免磁盘IO耗时导致播放延迟。在程序初始化阶段(进入主循环前)完成所有音效的加载:

# 初始化阶段和落子音效一起加载
win_sound = pygame.mixer.Sound("sounds/win.mp3")

2. 调整winCheck逻辑

直接调用预加载的音效播放即可,不需要重复加载资源:

if count >= 4:
    win_sound.play()
    return True

3. 主循环结束后增加等待播放完成的逻辑

不要在game_over变为True后直接退出程序,新增循环等待音效播放完成,过程中必须持续处理pygame事件队列:

# 原有的主循环
game_over = False
while not game_over:
    # 原有的事件处理、落子逻辑、绘制逻辑
    game_over = winCheck() # 调用你自己的胜利检测函数
    pygame.display.update()

# 新增:等待所有音效播放完成
while pygame.mixer.get_busy():
    # 必须处理事件,避免程序未响应
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
    # 加短延迟降低CPU占用
    pygame.time.delay(10)

# 所有音效播放完成后再执行退出逻辑
pygame.quit()

内容的提问来源于stack exchange,提问作者Jerry Pass

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:06:02