我无法想象在pygame中显示文字 我知道我不能像常规python IDLE一样使用print但我不知道如何
import pygame, sys
from pygame.locals import *
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = ( 255, 0, 0)
pygame.init()
size = (700, 500)
screen = pygame.display.set_mode(size)
DISPLAYSURF = pygame.display.set_mode((400, 300))
pygame.display.set_caption('P.Earth')
while 1: # main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.display.update()
import time
direction = ''
print('Welcome to Earth')
pygame.draw.rect(screen, RED, [55,500,10,5], 0)
time.sleep(1)
这只是整个计划的开始部分 如果有一种格式允许我显示我在pygame窗口中键入的文本,那就太棒了。所以不使用打印,我会使用其他东西。但我不知道那是什么东西:/ 当我在pygame中运行我的程序时,它没有显示任何内容 我希望程序在pygame窗口中运行,而不是只在空闲时运行。
答案 0 :(得分:24)
您可以在其上创建包含文字的表面。为此,请看一下这个简短的例子:
pygame.font.init() # you have to call this at the start,
# if you want to use this module.
myfont = pygame.font.SysFont('Comic Sans MS', 30)
这会创建一个新对象,您可以在其上调用render
方法。
textsurface = myfont.render('Some Text', False, (0, 0, 0))
这会创建一个新的曲面,其上已经绘制了文本。 最后,您只需将文本表面blit到主屏幕上即可。
screen.blit(textsurface,(0,0))
请记住,每次文本更改时,您都必须重新创建曲面,以查看新文本。
答案 1 :(得分:7)
显示时我有时会创建一个名为Funk的新文件。这将具有字体,大小等。这是类的代码:
import pygame
def text_to_screen(screen, text, x, y, size = 50,
color = (200, 000, 000), font_type = 'data/fonts/orecrusherexpand.ttf'):
try:
text = str(text)
font = pygame.font.Font(font_type, size)
text = font.render(text, True, color)
screen.blit(text, (x, y))
except Exception, e:
print 'Font Error, saw it coming'
raise e
然后当我想要显示文本时导入了这个更新E.G得分我做了:
Funk.text_to_screen(screen, 'Text {0}'.format(score), xpos, ypos)
如果只是普通文本没有更新:
Funk.text_to_screen(screen, 'Text', xpos, ypos)
您可能会在第一个示例中看到{0}。这是因为当使用.format(无论如何)时,将会更新。如果你有得分,那么你的目标得分为{0},得分为{1},目标得分为{1},然后是.format(得分,目标核心)
答案 2 :(得分:3)
还有一个pygame.freetype
模块,它更现代,可以使用更多字体并提供附加功能。
如果字体在游戏目录中,请使用pygame.freetype.SysFont()
或pygame.freetype.Font
创建字体对象。
您可以使用类似于旧pygame.font.Font.render
的{{3}}方法渲染文本,也可以使用render
直接将文本渲染到目标表面上。
import pygame
import pygame.freetype # Import the freetype module.
pygame.init()
screen = pygame.display.set_mode((800, 600))
GAME_FONT = pygame.freetype.Font("your_font.ttf", 24)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((255,255,255))
# You can use `render` and then blit the text surface ...
text_surface, rect = GAME_FONT.render("Hello World!", (0, 0, 0))
screen.blit(text_surface, (40, 250))
# or just `render_to` the target surface.
GAME_FONT.render_to(screen, (40, 350), "Hello World!", (0, 0, 0))
pygame.display.flip()
pygame.quit()
答案 3 :(得分:0)
这是一种更加独立于操作系统的方式:
# do this init somewhere
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
font = pygame.font.Font(pygame.font.get_default_font(), 36)
# now print the text
text_surface = font.render('Hello world', antialias=True, color=(0, 0, 0))
screen.blit(text_surface, dest=(0,0))
答案 4 :(得分:-1)
这是我的答案:
def draw_text(text, font_name, size, color, x, y, align="nw"):
font = pg.font.Font(font_name, size)
text_surface = font.render(text, True, color)
text_rect = text_surface.get_rect()
if align == "nw":
text_rect.topleft = (x, y)
if align == "ne":
text_rect.topright = (x, y)
if align == "sw":
text_rect.bottomleft = (x, y)
if align == "se":
text_rect.bottomright = (x, y)
if align == "n":
text_rect.midtop = (x, y)
if align == "s":
text_rect.midbottom = (x, y)
if align == "e":
text_rect.midright = (x, y)
if align == "w":
text_rect.midleft = (x, y)
if align == "center":
text_rect.center = (x, y)
screen.blit(text_surface, text_rect)
当然,您需要导入pygame,一种字体和一个屏幕,但这只是将其添加到其余代码中的定义,然后调用“ draw_text”。