使用Python Arcade库运行示例代码最小化窗口后黑屏如何解决?
问题原因
你遇到的最小化恢复后窗口黑屏问题是Arcade 2.5.7版本在Windows平台的已知特性:
- 你当前的代码仅在程序启动时执行了一次渲染逻辑,窗口最小化再恢复时,系统会清空原有的OpenGL渲染缓冲
- 该版本没有为单帧一次性渲染的场景自动做重绘缓存,因此缓冲清空后就会显示全黑
解决方案
方案1:升级Arcade版本
直接升级到Arcade最新稳定版即可解决,该版本已经针对这类简单渲染场景的重绘逻辑做了优化,无需修改代码即可正常使用。
升级命令:
pip install --upgrade arcade
方案2:修改为标准的Arcade类写法
如果要保留当前2.5.7版本,只需要把渲染逻辑放到on_draw回调方法中,窗口每次需要重绘时都会自动调用该方法重新绘制内容,不会出现黑屏问题。
修改后的代码示例:
import arcade class MyGame(arcade.Window): def __init__(self, width, height, title): super().__init__(width, height, title) arcade.set_background_color(arcade.color.WHITE) # 提前加载纹理避免每次渲染都重复加载 self.texture = arcade.load_texture(":resources:images/space_shooter/playerShip1_orange.png") def on_draw(self): # 每次重绘都会执行这里的逻辑 self.clear() # 你原来的所有绘制逻辑都可以放到此处 # 绘制网格 for x in range(0, 601, 120): arcade.draw_line(x, 0, x, 600, arcade.color.BLACK, 2) for y in range(0, 601, 200): arcade.draw_line(0, y, 800, y, arcade.color.BLACK, 2) # 绘制点 arcade.draw_text("draw_point", 3, 405, arcade.color.BLACK, 12) arcade.draw_point(60, 495, arcade.color.RED, 10) # 剩余的原绘制代码全部复制到此处即可 # 绘制图片 scale = .6 arcade.draw_scaled_texture_rectangle(540, 120, self.texture, scale, 0) arcade.draw_scaled_texture_rectangle(540, 60, self.texture, scale, 45) if __name__ == "__main__": game = MyGame(600, 600, "Drawing Primitives Example") arcade.run()
内容的提问来源于stack exchange,提问作者Gamestastic Programmer
相关产品推荐
相关产品推荐

