You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

运行Pygame时出现‘Python意外退出’及CAMetalLayer错误求助

解决Pygame在Mac上调用pygame.display.set_mode()时崩溃的问题

我之前也碰到过一模一样的问题!这是Mac系统版本和Pygame依赖的SDL2库之间的兼容性bug——SDL2的Metal渲染器尝试调用一个当前系统里CAMetalLayer类不存在的方法setDisplaySyncEnabled:,直接导致Python进程崩溃。给你几个快速解决的方案:

方案一:强制使用OpenGL渲染器(最快捷)

在调用set_mode的时候,指定使用OpenGL渲染模式,绕开Metal相关的bug:

import pygame
pygame.init()
# 强制使用OpenGL渲染,避免Metal兼容性问题
screen = pygame.display.set_mode((500, 500), pygame.OPENGL)

如果需要窗口可调整大小,也可以结合参数:

screen = pygame.display.set_mode((500, 500), pygame.OPENGL | pygame.RESIZABLE)

方案二:更新Pygame到最新版本

旧版本的Pygame绑定的SDL2库可能存在这个兼容性问题,通过更新Pygame可以修复:
打开终端执行更新命令:

pip install --upgrade pygame

如果你用的是conda环境,换成这条命令:

conda update pygame

方案三:调整系统版本(可选)

这个bug通常出现在较旧的MacOS版本中,如果上述方案都无效,且你的设备支持,可以尝试更新到较新的MacOS版本;或者如果是新系统出现问题,也可以考虑回退到稳定兼容的版本(不过这个操作成本较高,优先尝试前两个方案)

错误日志关键信息解析

你日志里的核心错误是这行:

2020-12-30 17:12:41.797 Python[683:12026] -[CAMetalLayer setDisplaySyncEnabled:]: unrecognized selector sent to instance 0x7fb453e60250

它说明SDL2的Metal渲染模块尝试调用一个当前系统不支持的Objective-C方法,触发了未捕获的异常,最终导致Python进程意外退出。

内容的提问来源于stack exchange,提问作者Bach Nguyen

火山引擎 最新活动