这是我的完整程序(仅供练习):
import pygame
pygame.init()
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
break
pygame.font.Font.render('Hello world', 1, (255, 100, 100))
输出是:
Traceback (most recent call last):
File "D:\Download\unim.py", line 8, in <module>
pygame.font.Font.render('Hello world', 1, (255, 100, 100))
TypeError: descriptor 'render' requires a 'pygame.font.Font' object but received a 'str'
在游戏中,pygame字体是可选的,但它会改善游戏。
答案 0 :(得分:3)
您需要先创建字体,例如
myfont = pygame.font.SysFont(None,10) # use default system font, size 10
然后你可以做
mytext = myfont.render('Hello world', 1, (255, 100, 100))
最后你需要将mytext
blit到你的表面并更新它以显示文字。
还可以查看pygame文档:http://www.pygame.org/docs/ref/font.html
编辑:如果这是您的完整脚本,您需要在事件循环之前初始化显示:
screen = pygame.display.set_mode((300,300)) # create a 300x300 display
然后您可以将文本blit到屏幕:
screen.blit(mytext, (0,0)) # put the text in top left corner of screen
pygame.display.flip() # update the display
由于文本是静态的,因此也不需要在while True:
循环内。您可以先显示文本。如果要根据事件更改文本,则应在循环内处理。
编辑2
在回答评论部分中的错误消息时,问题是因为在您发出pygame.quit()
命令后,一些pygame命令仍在运行。这是因为您的break
命令只会中断for event...
循环,但您仍然在while True:
循环内,因此blit命令仍会尝试运行。
你可以这样做:
import pygame
pygame.init()
screen = pygame.display.set_mode((1200,600))
myfont = pygame.font.SysFont(None, 30)
mytext = myfont.render('Hello world', 1, (255, 100, 100))
running = True
while running:
for event in pygame.event.get():
if event.type==pygame.QUIT:
running=False
screen.fill((255, 255, 255))
screen.blit(mytext, (600, 300))
pygame.display.flip()
pygame.quit()
这应该有效,因为主循环取决于running
为真。点击退出会将此设置为false,以便脚本干净地退出while
循环,然后运行pygame.quit()
命令。