Pygame使用精灵表:alpha问题

时间:2018-01-04 11:57:57

标签: python pygame

我使用精灵表来为我的播放器制作动画,但是当我在屏幕上显示动画的相应图像时,动画效果很好但是没有alpha。

Class Animation:
    def __init__(self, path, img_size):
        self.images = pyagme.image.load(path).convert_alpha()
        self.cur_img = 0
        ....

    def get_image(self):
        img=pygame.Surface((self.img_width,self.img_height)).convert_alpha()
        rect = pygame.Rect((self.cur_img * self.img_width, 0),(self.img_width, self.img_height))
        img.blit(self.images, (0, 0), rect)
        return img

我使用get_image功能来绘制玩家: 在每次更新时:self.image = self.cur_anim.get_image()self是播放器类。

在我的函数draw中:self.screen.blit(self.player.image, self.player.rect)

1 个答案:

答案 0 :(得分:1)

Surface永远不会透明,因此您必须使用RGBA颜色填充A=0以使其透明。

img = pygame.Surface((self.img_width,self.img_height)).convert_alpha()

img.fill( (0,0,0,0) )

但是有pygame.Surface.subsurface可以创建子图像(并且它不使用新内存)

def get_image(self):
    rect = pygame.Rect((self.cur_img * self.img_width, 0),(self.img_width, self.img_height))

    return self.images.subsurface(rect)

顺便说一句:您可以在__init__中创建所有子表面,以后再使用

def get_image(self):
    return self.all_subsurfaces[self.cur_img]