我有一个简单的自上而下的垂直射手la Galaga,我正在搞乱。然而,在查看完文档之后,我对如何有效地加载图像以及是否每帧都会对它们进行blit有点困惑。所有的图像都通过几个继承pygame sprite类的类加载。目前,我加载图像作为一类级别属性,如这样的:每帧加载和blitting图像?
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从每次我创建一个新的激光时间(加载图像的新实例到内存)。但是,这会按我的预期工作吗?
第二个问题源于将所有活动的精灵都传送到pygame表面。目前,我在调用pygame.display.update()之前,循环访问Laser(),Enemy()以及各个对象并逐个blit。看起来多余的东西必须单独blit每个对象,所以我问这是否是pygame实现的最有效的方法。或者,是否有办法一次消除每个对象并看到某种性能改进?
我不认为通过列表循环对性能有显著的影响。但是如果在多个帧中有很多精灵保持在同一位置,那么查看'BigYellowCactus'来避免在每一帧上都会出现这些精灵。 – pmoleri