首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RenderUpdates.draw()总是返回rects

RenderUpdates.draw()总是返回rects
EN

Stack Overflow用户
提问于 2022-11-04 02:14:10
回答 1查看 18关注 0票数 1

我使用的是一个电子游戏的雪碧组类,特别是pygame.sprite.RenderUpdates

我之所以使用那个sprite组类,是因为它应该返回已修改的rects的列表。

具体来说,文档表示关于pygame.sprite.RenderUpdates ()方法的如下内容:

...This方法还返回屏幕上已更改的矩形区域列表。返回的更改包括屏幕上受以前Group.clear()调用影响的区域。

我的问题

我的问题是,draw()方法返回一个rect的列表,即使我没有移动任何精灵(当根本没有动画的时候)。

draw()方法不是应该只返回已更改的rect吗?

下面是我的最小例子:

代码语言:javascript
运行
复制
    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的正确方法吗?

代码语言:javascript
运行
复制
update_rects = background_group.draw(screen)
update_rects += character_group.draw(screen)
EN

Stack Overflow用户

回答已采纳

发布于 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()调用影响的区域。

您必须关注这一点,并避免重新绘制未更改的对象。我能想到的一种方法是将每个已被移动并需要更新的雪碧放到一个“更新”组中,然后只绘制该组。在最小化/恢复的情况下,必须重新绘制整个场景,但在这种情况下,性能并不重要。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74311476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档