我使用精灵表来为我的播放器制作动画,但是当我在屏幕上显示动画的相应图像时,动画效果很好但是没有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)
答案 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]