【问题标题】:Pygame - More efficient to blit a sprite from spritesheet, or blit invidual sprites to their own surfaces?Pygame - 更有效地从 spritesheet 中 blit 一个 sprite,或 blit 单个 sprite 到它们自己的表面?
【发布时间】:2019-02-17 23:26:51
【问题描述】:

使用pygame,会不会更高效:

  1. 每帧从 spritesheet 的一部分中对单个 sprite 进行 Blit 处理
  2. 在启动时,将 spritesheet 中的每个精灵 blit 到它们自己的 Surfaces,然后 blit 这些 Surfaces

两者之间有性能差异吗?与启动时的单个 Surface 相比,使用第一种方法是否需要更多的绘制调用(即在启动时执行此操作是否会将这些像素的副本存储在 ram/vram 中)?

谢谢

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    将图像blit到一个表面上会更快,然后再对这些表面进行blit。

    但是它会消耗更多内存,因为您需要将这些表面保存在内存中的某个位置。

    为什么?

    当您从 spritesheet 中对图像进行 blit 处理时,您将最终对 spritesheet 表面进行子冲浪/剪切,这意味着您需要在现场生成另一个表面。不过,这个过程不会花很长时间。

    性能优势很可能不值得,因此我建议您使用最适合的方法。如果您担心性能,请查看内置的 CProfile python 模块。

    VRAM 永远不会出现在这个等式中。 pygame.Surface 派生自 C 编程语言的 SDL 库中的 SDL_Surface。 SDL_Surface 主要针对软件渲染,这意味着表面像素存储在标准 RAM 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      相关资源
      最近更新 更多