如何使用 pygame.fill 设置具有 alpha 值的像素,而不是在 pygame 中混合它们

问题描述 投票:0回答:1

所以,我试图为我的 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_?)

我的问题是,使用什么混合模式来设置像素值,而不是对先前的像素进行数学运算。或者如果做不到,那用什么方法可以达到同样的效果呢?

python pygame pygame-surface
1个回答
0
投票

如果您设置了混合模式,则

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()
© www.soinside.com 2019 - 2024. All rights reserved.