Python 试图使部分雪碧改变颜色,但整个雪碧却改变了

Python 试图使部分雪碧改变颜色,但整个雪碧却改变了,python,pygame,sprite,pygame-surface,Python,Pygame,Sprite,Pygame Surface,我有一些精灵在我的游戏中,需要特定的部分,以能够改变颜色 我的过程中,我试图有一个纯白色的雪碧图像,是透明的地方的颜色不需要。我在上面加了一个彩色方块,然后在主精灵的上面加了一个彩色方块,但是主精灵在任何地方都会改变颜色,但同时尊重主精灵的透明度。最让我困惑的是,当我把蒙版的彩色图像放在主屏幕上时,它看起来确实是正确的 #加载主精灵和遮罩精灵 self.image=pygame.image.load(“敌方.png”).convert_alpha() self.mask=pygame.image

我有一些精灵在我的游戏中,需要特定的部分,以能够改变颜色

我的过程中,我试图有一个纯白色的雪碧图像,是透明的地方的颜色不需要。我在上面加了一个彩色方块,然后在主精灵的上面加了一个彩色方块,但是主精灵在任何地方都会改变颜色,但同时尊重主精灵的透明度。最让我困惑的是,当我把蒙版的彩色图像放在主屏幕上时,它看起来确实是正确的

#加载主精灵和遮罩精灵
self.image=pygame.image.load(“敌方.png”).convert_alpha()
self.mask=pygame.image.load(“EnemyMask.png”).convert_alpha()
#创建整个精灵大小的彩色图像
self.colored_image=pygame.Surface([self.width,self.height])
自彩色图像填充(自彩色)
#用遮罩图像的透明度遮罩彩色图像,这部分工作正常
self.masked=self.mask.copy()
self.masked.blit(self.colored_image,(0,0),None,pygame.BLEND_RGBA_MULT)
#将蒙版图像放在主精灵的顶部
self.image.blit(self.masked,(0,0),None,pygame.BLEND\u MULT)
敌方

EnemyMask.png(它是白色的,所以看不见)

蒙色

最后失败的精灵

无法发布图片,声誉不足


我没有得到任何错误,但是只有屏蔽的白色部分应该是绿色的。image是加载的图像,您希望通过特定颜色更改特定区域,
self.mask
是定义区域的掩码

然后创建一个图像
蒙版
,其中包含在
蒙版
中指定的以特定颜色着色的区域

因此,您所要做的就是
.blit
图像
上设置着色遮罩(
遮罩
),而不设置任何
特殊标志

self.image.blit(self.masked,(0,0))
请参见示例,其中红色矩形更改为蓝色矩形:


最简单的例子:

雪碧:

遮罩:

导入pygame
def changColor(图像、maskImage、新颜色):
coloredImage=pygame.Surface(image.get_size())
颜色图像填充(新颜色)
masked=maskImage.copy()
蒙版。设置颜色键((0,0,0))
蒙面。blit(彩色图像,(0,0),无,pygame。混合)
finalImage=image.copy()
finalImage.blit(屏蔽,(0,0),无)
返回最终授权
pygame.init()
window=pygame.display.set_模式((40484))
image=pygame.image.load('avatar64.png')。convert_alpha()
maskImage=pygame.image.load('avatar64mask.png')。convert_alpha()
颜色=[]
对于范围(0、360、60)内的色调:
colors.append(pygame.Color(0))
颜色[-1].hsla=(色调,100,50,100)
图像=[changColor(图像,maskImage,c)表示c的颜色]
clock=pygame.time.clock()
nextColorTime=0
运行=真
运行时:
时钟滴答(60)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
窗口填充((255,255,255))
对于i,枚举中的图像(图像):
blit(图像,(10+i*64,10))
pygame.display.flip()
pygame.quit()
退出()

我看不到你的图像,它们需要一个谷歌帐户。(除了第一张图片)我只是改变了一些东西,想看看第二张图片是否适合你
self.color
没有alpha,但也只有纯色谢谢!我不完全清楚为什么会有这样的问题,但它已经奏效了。考虑到这个解决方案,我需要使面具具有我的整个精灵的灰度细节。