为什么我的文本字符串在 Pygame 中呈现为 solid/filled 矩形?
Why is my text string rendered as a solid/filled rectangle in Pygame?
所以我制作了一个“Yo Mama”笑话生成器,它做了它应该做的事情(如果我删除所有 Pygame-specific 代码并将其打印到 terminal/command线)。但是当我添加 Pygame 并创建一个应用程序时,它显示文本为一个白色矩形。 Visual Studio 没有给我任何错误,但文本被视为白色矩形。看看the error
import random
import pygame
import os
from yo_mama_jokes import da_jokes
pygame.font.init()
WIDTH, HEIGHT = 750,750
WIN = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Your mama joke generator")
def main():
myfont = pygame.font.SysFont("monospace", 20)
run = True
joke = random.choice(da_jokes)
while run:
label = myfont.render(joke, 1, (255,255,255))
WIN.blit(label, (15, 350))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
main()
使用 pygame.SRCALPHA
标志为您的文本提供透明背景:
label = myfont.render(joke, 1, (255,255,255), pygame.SRCALPHA)
编辑:
这段代码实际上在文本后面使用了 black 背景。 render
的第 4 个参数采用背景颜色,由于它不识别 pygame.SRCALPHA
标志,因此将背景设置为黑色。这适用于您的情况,但如果您有多色背景则无效。
您必须在 (255,255,255)
之后添加 , pygame.SRCALPHA)
。
Srcalpha
创建一个空像素 alpha 表面。如果颜色包含第四个 alpha 值
,表面现在将绘制透明度
这样,当我添加 Pygame 并创建应用程序时,文本将不会被视为白色矩形。您将透明表面的每个像素:)
import random
import pygame
import os
from yo_mama_jokes import da_jokes
pygame.font.init()
WIDTH, HEIGHT = 750,750
WIN = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Your mama joke generator")
def main():
myfont = pygame.font.SysFont("monospace", 20)
run = True
joke = random.choice(da_jokes)
while run:
label = myfont.render(joke, 1, (255,255,255), pygame.SRCALPHA)
WIN.blit(label, (15, 350))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
main()
问题不在于您的代码,而在于您的系统。您的代码工作正常:
import pygame
pygame.font.init()
WIDTH, HEIGHT = 750,750
WIN = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Your mama joke generator")
background = pygame.Surface(WIN.get_size())
ts, w, h, c1, c2 = 50, *background.get_size(), (128, 128, 128), (64, 64, 64)
tiles = [((x*ts, y*ts, ts, ts), c1 if (x+y) % 2 == 0 else c2) for x in range((w+ts-1)//ts) for y in range((h+ts-1)//ts)]
[pygame.draw.rect(background, color, rect) for rect, color in tiles]
def main():
myfont = pygame.font.SysFont("monospace", 100)
run = True
joke = "Joke"
while run:
WIN.blit(background, (0, 0))
label = myfont.render(joke, 1, (255,255,255))
WIN.blit(label, (15, 350))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
main()
请注意,Pygame 2.1.0 的 MacOS 版本中存在一个已知错误。 fill(0)
。无法正常工作,必须替换为 fill((0, 0, 0))
。此错误将在 Pygame 2.1.1.
中修复
参见 Fix weird MacOS display surf weirdness #2859。
所以我制作了一个“Yo Mama”笑话生成器,它做了它应该做的事情(如果我删除所有 Pygame-specific 代码并将其打印到 terminal/command线)。但是当我添加 Pygame 并创建一个应用程序时,它显示文本为一个白色矩形。 Visual Studio 没有给我任何错误,但文本被视为白色矩形。看看the error
import random
import pygame
import os
from yo_mama_jokes import da_jokes
pygame.font.init()
WIDTH, HEIGHT = 750,750
WIN = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Your mama joke generator")
def main():
myfont = pygame.font.SysFont("monospace", 20)
run = True
joke = random.choice(da_jokes)
while run:
label = myfont.render(joke, 1, (255,255,255))
WIN.blit(label, (15, 350))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
main()
使用 pygame.SRCALPHA
标志为您的文本提供透明背景:
label = myfont.render(joke, 1, (255,255,255), pygame.SRCALPHA)
编辑:
这段代码实际上在文本后面使用了 black 背景。 render
的第 4 个参数采用背景颜色,由于它不识别 pygame.SRCALPHA
标志,因此将背景设置为黑色。这适用于您的情况,但如果您有多色背景则无效。
您必须在 (255,255,255)
之后添加 , pygame.SRCALPHA)
。
Srcalpha
创建一个空像素 alpha 表面。如果颜色包含第四个 alpha 值
这样,当我添加 Pygame 并创建应用程序时,文本将不会被视为白色矩形。您将透明表面的每个像素:)
import random
import pygame
import os
from yo_mama_jokes import da_jokes
pygame.font.init()
WIDTH, HEIGHT = 750,750
WIN = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Your mama joke generator")
def main():
myfont = pygame.font.SysFont("monospace", 20)
run = True
joke = random.choice(da_jokes)
while run:
label = myfont.render(joke, 1, (255,255,255), pygame.SRCALPHA)
WIN.blit(label, (15, 350))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
main()
问题不在于您的代码,而在于您的系统。您的代码工作正常:
import pygame
pygame.font.init()
WIDTH, HEIGHT = 750,750
WIN = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Your mama joke generator")
background = pygame.Surface(WIN.get_size())
ts, w, h, c1, c2 = 50, *background.get_size(), (128, 128, 128), (64, 64, 64)
tiles = [((x*ts, y*ts, ts, ts), c1 if (x+y) % 2 == 0 else c2) for x in range((w+ts-1)//ts) for y in range((h+ts-1)//ts)]
[pygame.draw.rect(background, color, rect) for rect, color in tiles]
def main():
myfont = pygame.font.SysFont("monospace", 100)
run = True
joke = "Joke"
while run:
WIN.blit(background, (0, 0))
label = myfont.render(joke, 1, (255,255,255))
WIN.blit(label, (15, 350))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
main()
请注意,Pygame 2.1.0 的 MacOS 版本中存在一个已知错误。 fill(0)
。无法正常工作,必须替换为 fill((0, 0, 0))
。此错误将在 Pygame 2.1.1.
中修复
参见 Fix weird MacOS display surf weirdness #2859。