所以,我试图为我的 pygame gui 库创建一个 CropView。现在这并不重要,眼前的问题是。假设我有一个每像素 alpha 表面
surf = pygame.Surface((100, 100), pygame.SRCALPHA)
area_not_to_fill = pygame.Rect(25, 25, 50, 50)
现在我想用半透明的黑色填充表面
surf.fill((0, 0, 0, 128))
但是现在,我想要的只是使用填充将表面的某个部分设置为透明
surf.fill((0, 0, 0, 0), area_not_to_fill, pygame.BLENDMODE_?)
我的问题是,使用什么混合模式来设置像素值,而不是对先前的像素进行数学运算。或者如果做不到,那用什么方法可以达到同样的效果呢?
fill
功能仅与背景混合。如果未设置混合模式,则仅设置颜色。所以只指定区域,而不指定混合模式:
surf.fill((0, 0, 0, 0), area_not_to_fill)
最小示例
import pygame
pygame.init()
window = pygame.display.set_mode((200, 200))
clock = pygame.time.Clock()
surf = pygame.Surface((100, 100), pygame.SRCALPHA)
area_not_to_fill = pygame.Rect(25, 25, 50, 50)
surf.fill((0, 0, 0, 128))
surf.fill((0, 0, 0, 0), area_not_to_fill)
run = True
while run:
clock.tick(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill("white")
window.blit(surf, surf.get_rect(center = window.get_rect().center))
pygame.display.flip()
pygame.quit()
exit()