我有一个简单的自上而下的垂直射击游戏 la Galaga,我正在玩弄它。但是,在查看文档后,我对如何有效地加载图像以及是否每帧都进行 blit 处理感到有些困惑。所有的图像都是通过几个继承 pygame sprite 类的类加载的。目前,我正在将图像作为类级别属性加载,如下所示:
class Laser(pygame.sprite.Sprite):
image = None
def __init__(self, start_x, start_y):
pygame.sprite.Sprite.__init__(self)
self.pos_x = start_x
self.pos_y = start_y
if Laser.image is None:
Laser.image = pygame.image.load('img/laser_single.png')
self.image = Laser.image
self.rect = self.image.get_rect()
self.rect.topleft = [self.pos_x, self.pos_y]
我希望这可以防止 Python 在我每次创建新的 Laser() 时将图像的新实例加载到内存中。但这会像我预期的那样工作吗?
第二个问题源于将所有活动的 sprite 放到 pygame 表面上。目前,我遍历了一系列 Laser()、Enemy() 和诸如此类的对象,并在调用 pygame.display.update() 之前分别对每个对象进行 blit。必须单独对每个对象进行 blit 似乎是多余的,所以我问这是否是 pygame 实现的最有效的方法。或者,有没有办法一次对每个对象进行 blit 并看到某种性能改进?