所以,我试着为我的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函数仅与背景混合.如果未设置混合模式,则仅设置 colored颜色 .因此,仅指定区域,而不指定混合模式:

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()

Python相关问答推荐

ambda将时间戳与组内另一列的所有时间戳进行比较

用gekko解决的ADE方程系统突然不再工作,错误消息异常:@错误:模型文件未找到.& &

使用polars .滤镜进行切片速度比pandas .loc慢

更改matplotlib彩色条的字体并勾选标签?

点到面的Y距离

带条件计算最小值

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

Pre—Commit MyPy无法禁用非错误消息

Python+线程\TrocessPoolExecutor

pandas:排序多级列

如何根据一列的值有条件地 Select 前N组?

如何在表中添加重复的列?

当点击tkinter菜单而不是菜单选项时,如何执行命令?

启动带有参数的Python NTFS会导致文件路径混乱

为什么\b在这个正则表达式中不解释为反斜杠

如何删除重复的文字翻拍?

如何从比较函数生成ngroup?

如何将一个文件的多列导入到Python中的同一数组中?

如何获取给定列中包含特定值的行号?