我使用的是一个电子游戏的雪碧组类,特别是pygame.sprite.RenderUpdates
我之所以使用那个sprite组类,是因为它应该返回已修改的rects的列表。
具体来说,文档表示关于pygame.sprite.RenderUpdates ()方法的如下内容:
...This方法还返回屏幕上已更改的矩形区域列表。返回的更改包括屏幕上受以前Group.clear()调用影响的区域。
我的问题
我的问题是,draw()方法返回一个rect的列表,即使我没有移动任何精灵(当根本没有动画的时候)。
draw()方法不是应该只返回已更改的rect吗?
下面是我的最小例子:
background_group = pygame.sprite.RenderUpdates()
character_group = pygame.sprite.RenderUpdates()
character_group.clear(screen, bg_surface)
character_group.update()
# The issue is below.
# I always get a list of rects, even if I don't call the update() method above.
update_rects = background_group.draw(screen)
update_rects += character_group.draw(screen)
# I always have rects here (even when I don't move any sprites). Why?
print(update_rects)
pygame.display.update(update_rects)
clock.tick(30)另外,这是从两个精灵组中获取rects的正确方法吗?
update_rects = background_group.draw(screen)
update_rects += character_group.draw(screen)发布于 2022-11-04 05:11:18
难道draw()方法不应该只返回已更改的rects吗?
不不是的。pygame.sprite.RenderUpdates.draw。不验证重绘区域的内容或比较像素,因为这将花费太多的时间。该方法只收集被重绘的区域,即使它们是用相同的内容重新绘制的。这是因为每个Group.draw()都会导致Group.clear()。请参阅pygame.sprite.RenderUpdates.draw的文档
将所有Sprite绘制到曲面上,与Group.draw()相同。此方法还返回屏幕上已更改的矩形区域列表。返回的更改包括屏幕上受以前Group.clear()调用影响的区域。
您必须关注这一点,并避免重新绘制未更改的对象。我能想到的一种方法是将每个已被移动并需要更新的雪碧放到一个“更新”组中,然后只绘制该组。在最小化/恢复的情况下,必须重新绘制整个场景,但在这种情况下,性能并不重要。
https://stackoverflow.com/questions/74311476
复制相似问题