有没有办法可以使用python在pygame窗口上显示文本?
我需要显示一堆更新的实时信息,而不是为我需要的每个角色制作图像。
我可以在屏幕上显示文字吗?
答案 0 :(得分:56)
是。可以在pygame中绘制文本:
# initialize font; must be called after 'pygame.init()' to avoid 'Font not Initialized' error
myfont = pygame.font.SysFont("monospace", 15)
# render text
label = myfont.render("Some text!", 1, (255,255,0))
screen.blit(label, (100, 100))
答案 1 :(得分:9)
您可以使用pygame.font.Font
设置字体路径,以使用自己的自定义字体pygame.font.Font(filename, size): return Font
示例:
pygame.font.init()
font_path = "./fonts/newfont.ttf"
font_size = 32
fontObj = pygame.font.Font(font_path, font_size)
然后使用fontObj.render渲染字体并将blit渲染到曲面,就像上面的veiset的答案一样。 :)
答案 2 :(得分:6)
我的游戏中有一些显示实时得分的代码。它具有快速访问功能。
def texts(score):
font=pygame.font.Font(None,30)
scoretext=font.render("Score:"+str(score), 1,(255,255,255))
screen.blit(scoretext, (500, 457))
我在我的while循环中使用它来调用它:
texts(score)
答案 3 :(得分:2)
我写了一个包装器,它会缓存文本表面,只在脏时重新渲染。 googlecode/ninmonkey/nin.text/demo/
答案 4 :(得分:0)
有2种可能性。无论哪种情况,都必须通过pygame.init
初始化PyGame。
import pygame
pygame.init()
使用pygame.font
模块并创建pygame.font.SysFont
或pygame.font.Font
对象。 render()
和pygame.Surface
,其中包含文本,而blit
的表面出现在屏幕上:
my_font = pygame.font.SysFont(None, 50)
text_surface = myfont.render("Hello world!", True, (255, 0, 0))
screen.blit(text_surface, (10, 10))
或使用pygame.freetype
模块。创建一个pygame.freetype.SysFont()
或pygame.freetype.Font
对象。用文本render()
和pygame.Surface
或直接render_to()
文本到屏幕:
my_ft_font = pygame.freetype.SysFont('Times New Roman', 50)
my_ft_font.render_to(screen, (10, 10), "Hello world!", (255, 0, 0))
另请参阅Text and font
最小的pygame.font
示例: repl.it/@Rabbid76/PyGame-Text
import pygame
pygame.init()
window = pygame.display.set_mode((500, 150))
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 100)
text = font.render('Hello World', True, (255, 0, 0))
background = pygame.Surface(window.get_size())
ts, w, h, c1, c2 = 50, *window.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)]
for rect, color in tiles:
pygame.draw.rect(background, color, rect)
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.blit(background, (0, 0))
window.blit(text, text.get_rect(center = window.get_rect().center))
pygame.display.flip()
pygame.quit()
exit()
最小的pygame.freetype
示例: repl.it/@Rabbid76/PyGame-FreeTypeText
import pygame
import pygame.freetype
pygame.init()
window = pygame.display.set_mode((500, 150))
clock = pygame.time.Clock()
ft_font = pygame.freetype.SysFont('Times New Roman', 80)
background = pygame.Surface(window.get_size())
ts, w, h, c1, c2 = 50, *window.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)]
for rect, color in tiles:
pygame.draw.rect(background, color, rect)
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.blit(background, (0, 0))
text_rect = ft_font.get_rect('Hello World')
text_rect.center = window.get_rect().center
ft_font.render_to(window, text_rect.topleft, 'Hello World', (255, 0, 0))
pygame.display.flip()
pygame.quit()
exit()