首页 > 解决方案 > 在 Pygame 中使用 Dirty Rects 会更新整个显示,而不仅仅是矩形

问题描述

我是一个相当新的程序员,最近我一直在尝试使用 Dirty Rects 来让我的游戏运行得更快。不幸的是,我遇到了一些问题。无论我如何通过矩形,它都会更新整个屏幕。我尝试将 Rect 参数直接输入到 update() 中,创建一个 pygame.Rect 对象,并在图像上使用 get_rect() (并非全部如下图所示)。

self.screen.fill((255, 255, 255))
self.screen.blit(self.image, (0, 0))
self.screen.blit(self.image, (200, 200))
self.update = pygame.Rect((0, 0, 1, 1))
 
pygame.display.update(self.update)

以下是其他一些方法:

pygame.display.update(self.image.get_rect(topleft=(0, 0)))
pygame.display.update((0, 0, 1, 1))

会发生两件事之一。如果我将 Rect 的宽度和高度设置为 0,那么屏幕上的任何内容都不会更新。否则,无论参数如何,一切都会更新。我在使用操作系统时听说过一些与此相关的问题,但我使用的是 Windows 10 和 Python 3.9,这是 pastebin 上的代码:https ://pastebin.com/DqEWHZKh感谢您的帮助!

注意:粘贴的代码只是我为尝试一些东西而制作的测试程序,而不是我的实际游戏。

编辑:将我的 Pygame 更新到 2.0.1 可以解决这个问题,谢谢!

标签: pythonpython-3.xpygame

解决方案


这是 PyGame 2.0.0 版中的一个已知错误:

由于 SDL2 UpdateWindowFramebuffer implementation #251 pygame.display.update(Rect) 在 Windows 上更新整个屏幕

该错误已得到解决。您必须更新到 PyGame 版本 2.0.1


推荐阅读