Pygame中image.convert_alpha()失效 精灵图切分后出现黑色背景如何解决
问题解决方案
你的透明背景异常是两个核心问题共同导致的,按下方步骤修改即可解决:
1. 核心问题原因
- 创建
self.image时没有添加pygame.SRCALPHA标识:Pygame默认创建的Surface初始为不透明黑色,仅调用convert_alpha()只会将Surface转换为带alpha通道的格式,不会清空原有黑色背景 - 未指定精灵表截取区域:直接blit整张96x38的精灵表到12x19的Surface上,相当于只取了精灵表左上角的内容,后续切帧也会受影响
2. 修复后的Player类构造函数代码
class Player(pygame.sprite.Sprite): def __init__(self, x, y): super(Player, self).__init__() # 精灵表仅需一次convert_alpha,避免重复调用损耗性能 self.spritesheet = pygame.image.load('assets/imgs/player0.png').convert_alpha() # 添加SRCALPHA标识,创建初始全透明的Surface self.image = pygame.Surface([12, 19], pygame.SRCALPHA).convert_alpha() # blit第三个参数为源截取区域:(源x坐标, 源y坐标, 截取宽度, 截取高度) # 要切换精灵帧只需修改前两个坐标值即可 self.image.blit(self.spritesheet, (0, 0), (0, 0, 12, 19)) self.position = [x, y] self.rect = self.image.get_rect() self.speed = 3 # 其余方法保留原有代码即可
3. 额外排查项
如果你的精灵表本身是不带透明通道的资源(背景为统一实色),可在blit完成后添加一行代码设置色键:
# 括号内为精灵表背景的RGB色值,示例为纯黑色 self.image.set_colorkey((0,0,0))
内容的提问来源于stack exchange,提问作者Cold Fire
相关产品推荐
相关产品推荐

