我刚开始使用 pygame,我正在尝试制作一个半透明的 Sprite , Sprite 的源文件是从磁盘加载的非透明位图文件。如果可以的话,我不想编辑源图像。我确信有一种方法可以使用 pygame 代码来执行此操作,但 Google 对我没有帮助。
最佳答案
加载图像后,您需要在 Surface
上启用 alpha channel 。看起来有点像这样:
background = pygame.Display.set_mode()
myimage = pygame.image.load("path/to/image.bmp").convert_alpha(background)
这将加载图像并立即将其转换为适合 alpha 混合到显示表面的像素格式。如果您需要 blit 到其他格式的屏幕外缓冲区,您可以使用其他表面。
您可以足够简单地设置每个像素的 alpha,假设您有一个函数,它接受 rgb 颜色值的 3 元组并返回一些所需的 rgba 颜色 + alpha 的 4 元组,您可以改变每个像素的表面:
def set_alphas(color):
if color == (255,255,0): # magenta means clear
return (0,0,0,0)
if color == (0,255,255): # cyan means shadow
return (0,0,0,128)
r,g,b = color
return (r,g,b,255) # otherwise use the solid color from the image.
for row in range(myimage.get_height()):
for col in range(myimage,get_width()):
myimage.set_at((row, col), set_alphas(myimage.get_at((row, col))[:3]))
还有其他更有用的方法可以做到这一点,但我希望这能给你启发。
关于python - 如何在pygame中制作半透明 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1247921/