Python 如何在PyGame中使用alpha通道渲染透明文本?

Python 如何在PyGame中使用alpha通道渲染透明文本?,python,pygame,Python,Pygame,我正在使用pygame.font.font.render()渲染一些文本。我希望文本是半透明的,即alpha值不是255,因此我尝试传递一个带有alpha值的颜色参数(例如(255,0,0,150))作为pygame.font.font.render()的颜色参数,但没有任何效果。我还尝试在生成的Surface对象上使用pygame.Surface.convert_alpha(),但也没有任何效果。有什么想法吗?我不知道为什么,但经过一些实验后,我发现使用font.render创建的曲面无法更改

我正在使用
pygame.font.font.render()
渲染一些文本。我希望文本是半透明的,即alpha值不是255,因此我尝试传递一个带有alpha值的颜色参数(例如
(255,0,0,150)
)作为
pygame.font.font.render()
的颜色参数,但没有任何效果。我还尝试在生成的Surface对象上使用
pygame.Surface.convert_alpha()
,但也没有任何效果。有什么想法吗?

我不知道为什么,但经过一些实验后,我发现使用
font.render
创建的曲面无法更改其alpha值。只需将该曲面拼接到另一个曲面,然后更改新曲面的alpha值

textsurface=font.render('Test', True, (0, 0, 0))
surface=pygame.Surface((100, 30))
surface.fill((255, 255, 255))
surface.blit(textsurface, pygame.Rect(0, 0, 10, 10))
surface.set_alpha(50)
window.blit(surface, pygame.Rect(0, 30, 10, 10))

我不知道为什么,但经过一些实验后,我发现使用
font.render
创建的曲面无法更改其alpha值。只需将该曲面拼接到另一个曲面,然后更改新曲面的alpha值

textsurface=font.render('Test', True, (0, 0, 0))
surface=pygame.Surface((100, 30))
surface.fill((255, 255, 255))
surface.blit(textsurface, pygame.Rect(0, 0, 10, 10))
surface.set_alpha(50)
window.blit(surface, pygame.Rect(0, 30, 10, 10))
使用该模块时,渲染文本时不考虑文本颜色的alpha通道,但请参见:

抗锯齿图像渲染为24位RGB图像。如果背景是透明的,则将包括像素alpha

在pygame 2.0中进行了更改:每表面alpha可以与每像素alpha相结合

因此,在使用
set\u alpha
渲染文本后,完全可以设置透明度。这甚至适用于抗锯齿文本:

font=pygame.font.SysFont(无,150)
text\u surf=font.render('testtext',True,(255,0,0))
文本搜索集α(127)
窗口.blit(文本(x,y))
最简单的例子:

导入pygame
pygame.init()
window=pygame.display.set_模式((500300))
clock=pygame.time.clock()
font=pygame.font.SysFont(无,150)
text\u surf=font.render('testtext',True,(255,0,0))
文本搜索集α(127)
background=pygame.Surface(window.get\u size())
ts,w,h,c1,c2=50,*window.get_size(),(128,128,128),(64,64,64)
分幅=[(x*ts,y*ts,ts,ts),c1如果(x+y)%2==0,则c2)用于范围内的x((w+ts-1)//ts)用于范围内的y((h+ts-1)//ts)]
对于矩形,瓷砖中的颜色:
pygame.draw.rect(背景、颜色、rect)
运行=真
运行时:
时钟滴答(60)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
窗口blit(背景,(0,0))
blit(text\u surf,text\u surf.get\rect(center=window.get\rect().center))
pygame.display.flip()
pygame.quit()
退出()

通过使用该模块,您可以在创建文本表面时直接使用透明颜色:

ft\u font=pygame.freetype.SysFont('Times New Roman',150)
text\u surf2,text\u rect2=ft\u font.render('测试文本',(255,0,0,128))
窗口.blit(文本2,(x,y))
或者,如果要将文本直接渲染到曲面上:

ft\u font=pygame.freetype.SysFont('Times New Roman',150)
字体渲染到(窗口,(x,y),‘测试文本’,(255,0,0,128))
最简单的例子:

导入pygame
导入pygame.freetype
pygame.init()
window=pygame.display.set_模式((500300))
clock=pygame.time.clock()
ft_font=pygame.freetype.SysFont('Times New Roman',150)
text\u surf2,text\u rect2=ft\u font.render('测试文本',(255,0,0,128))
background=pygame.Surface(window.get\u size())
ts,w,h,c1,c2=50,*window.get_size(),(128,128,128),(64,64,64)
分幅=[(x*ts,y*ts,ts,ts),c1如果(x+y)%2==0,则c2)用于范围内的x((w+ts-1)//ts)用于范围内的y((h+ts-1)//ts)]
对于矩形,瓷砖中的颜色:
pygame.draw.rect(背景、颜色、rect)
运行=真
运行时:
时钟滴答(60)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
窗口blit(背景,(0,0))
text_rect=ft_font.get_rect('测试文本')
text_rect.center=(window.get_width()//2,window.get_height()//2-70)
ft_font.render_to(窗口,文本_rect.topleft,‘测试文本’,(255,0,0,128))
text_rect2.center=(window.get_width()//2,window.get_height()//2+70)
blit(text\u surf2,text\u rect2)
pygame.display.flip()
pygame.quit()
退出()
另请参见

使用该模块时,渲染文本时不考虑文本颜色的alpha通道,但请参见:

抗锯齿图像渲染为24位RGB图像。如果背景是透明的,则将包括像素alpha

在pygame 2.0中进行了更改:每表面alpha可以与每像素alpha相结合

因此,在使用
set\u alpha
渲染文本后,完全可以设置透明度。这甚至适用于抗锯齿文本:

font=pygame.font.SysFont(无,150)
text\u surf=font.render('testtext',True,(255,0,0))
文本搜索集α(127)
窗口.blit(文本(x,y))
最简单的例子:

导入pygame
pygame.init()
window=pygame.display.set_模式((500300))
clock=pygame.time.clock()
font=pygame.font.SysFont(无,150)
text\u surf=font.render('testtext',True,(255,0,0))
文本搜索集α(127)
background=pygame.Surface(window.get\u size())
ts,w,h,c1,c2=50,*window.get_size(),(128,128,128),(64,64,64)
分幅=[(x*ts,y*ts,ts,ts),c1如果(x+y)%2==0,则c2)用于范围内的x((w+ts-1)//ts)用于范围内的y((h+ts-1)//ts)]
对于矩形,瓷砖中的颜色:
pygame.draw.rect(背景、颜色、rect)
运行=真
运行时:
时钟滴答(60)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
窗口blit(背景,(0,0))
blit(text\u surf,text\u surf.get\rect(center=window.get\rect().center))
pygame.display.flip()
pygame.quit()
退出()

通过使用该模块,您可以在创建文本表面时直接使用透明颜色:

ft\u font=pygame.freetype.SysFont('