Прочитайте документацию pygame.font.Font.render
:
[...] В зависимости от типа используемого фона и сглаживания, это возвращает различные типы поверхностей. Из соображений производительности полезно знать, какой тип изображения будет использоваться. [...] Если фон прозрачный, будет установлена цветовая клавиша. Сглаженные изображения отображаются в 24-битных RGB-изображениях. Если фон прозрачен, будет добавлена альфа-пиксель .
Это означает, что если аргумент antialias
равен True
, то вам необходимо установить прозрачный цвет background
генерировать прозрачный текст. Например:
self.button_color=(0,100,100,128) # transparent alpha=128
self.text_color=(255,0,0)
self.text = pygame.font.Font(None,100).render(text,True,self.text_color, self.button_color)
Прочитайте документацию pygame.Surface.fill
:
[...] Цветовой аргумент может быть либо RGB последовательность, последовательность RGBA или сопоставленный индекс цвета. При использовании RGBA альфа (часть RGBA) игнорируется, если только поверхность не использует пиксель альфа (у поверхности есть флаг SRCALPHA) .
Вы должны создать пигмею .Поверхность объекта с атрибутом SCRALPHA
для рисования прозрачного прямоугольника:
rectsurf = pygame.Surface(self.rect.size,pygame.SRCALPHA)
rectsurf.fill(self.button_color)
setting.screen.blit(rectsurf,self.rect.topleft)
Чтобы достичь того, что вы хотите, вам нужно blit
текст на прямоугольнике, используя специальный флаг BLEND_MAX
. draw_button
просто нужно blit
, кнопка прямоугольника, которая содержит текст, на экране. Например:
![](https://i.stack.imgur.com/VLpmO.png)
class Button():
def __init__(self,setting,text):
self.width,self.height = 400,100
self.button_color=(0,100,100,128)
self.text_color=(255,0,0,128)
self.text = pygame.font.Font(None,100).render(text,True,self.text_color, self.button_color)
self.rect = pygame.Rect(0,0,self.width,self.height)
self.text_rect = self.text.get_rect()
self.text_rect.center = self.rect.center
self.btnsurf = pygame.Surface(self.rect.size,pygame.SRCALPHA)
self.btnsurf.fill(self.button_color)
self.btnsurf.blit(self.text, self.text_rect, special_flags=pygame.BLEND_MAX)
self.rect.center = setting.screen_rect.center
def draw_button(self,setting):
setting.screen.blit(self.btnsurf,self.rect)