Pygame使用透明值填充Surface时对象变为棕色方块问题求助
问题原因说明
- 你加载的
intro_ball.gif默认未启用逐像素alpha通道,调用fill()时传入的四通道透明色会被忽略,直接填充为RGB对应的黑色,而你使用的ho.png本身自带alpha通道,所以填充透明操作可以正常生效。 - 另一个操作逻辑问题:你在结束界面的循环里反复修改原始图像的Surface数据,属于无意义的冗余操作,也会导致原始图像被永久修改无法复用。
解决办法
方案1(最优,无需修改原始图像)
如果仅需要在结束界面隐藏两个对象、不影响文本显示,直接删除结束循环里的两行绘制代码即可,完全不需要修改原图像:
把第二个while循环里的
screen.blit(enemy, enrect) screen.blit(character, charrect)
这两行直接删掉,不绘制就等于对象消失,是最简单的实现方案。
方案2(如果确实需要保留填充透明的逻辑)
加载图像的时候统一转换为带alpha通道的Surface,修改加载图像的两行代码即可:
# 加载时调用convert_alpha()启用alpha通道支持 character = pygame.image.load("intro_ball.gif").convert_alpha() enemy = pygame.image.load("ho.png").convert_alpha()
修改后再用透明色填充就能对两个图像都生效。
额外优化建议
你当前结束界面的循环里反复对character和enemy执行fill操作是冗余的,只需要执行一次就够了,不需要放在循环里每次运行。
内容的提问来源于stack exchange,提问作者FireFlower
相关产品推荐
相关产品推荐

