"Merge" Pygame 中的多个图像到一个表面以动态旋转它们

"Merge" Multiple Images in Pygame into one Surface to rotate them all dynamically

目前我正在 pygame 开发一款游戏,它的灵感来自一款名为“recrew”的游戏(它是在 global game jam 2020 上制作的)目标是扩展飞船,探索岛屿并防止你的船沉没。

为了更好的感觉,我想旋转整艘船。飞船表示为 class,所有方块都保存在列表中。每个方块都是一个 pygame.Surface,在飞船 class 中渲染。有没有办法动态旋转所有这些块,而不是每个块都旋转而不是改变位置,整个船动态旋转。

也许块可以全部合并到一个大的 Surface 中,相对于它们的位置,或者主 Window Surface 的一部分与块被保存到另一个 Surface 上。我只是不知道解决这个问题的好方法。

您可以将图像(只是一个表面)blit 到任何其他表面,而不仅仅是显示器(参见文档 here)。因此,您可以创建一个合并的表面,并将船图像和您想要在船上的每个图像 blit 到它上面。像这样:

merged_surf.blit(some_surface, some_surface_rect)

some_surface_rect 的位置部分描述了您要将其放置在 merged_surf 上的位置,因此它是相对于 merged_surf 的。

然后您可以将 merged_surf 与上面已有的所有其他图像一起旋转(请参阅文档 here)。然后最后将merged_surf blit 到显示器上。

请记住,旋转表面的边界框可能会比原始图像的边界框大。如果您试图将中心保持在原位,则需要将旋转表面的中心 rect 分配给原始预旋转图像的中心。否则它会在旋转时出现弹跳。