我发现了很多关于使用pygame及其字体库的教程,但它们都显示了相同的内容。他们都向您展示了如何在背景上写一些纯文本,这很棒,但除此之外,我找不到很多有用的信息。
通过我正在开发的项目,我有一些菜单按钮,我已经实现了精灵。当你将鼠标悬停在它们上面时,它们会改变颜色,而且一切都很好。我想做的是在这些按钮上写文字,但我对如何做到这一点感到困惑。在docs中,font.render的工作原理如下:
“这会创建一个新的Surface,并在其上呈现指定的文本.Pygame无法直接在现有Surface上绘制文本:相反,您必须使用Font.render - 在新Surface上绘制文本以创建图像(Surface )然后将该图像blit到另一个Surface上。“
所以我试图拍摄附在我的精灵上的图像,直接将文字加到上面。这似乎绝对没有任何作用:
resume = self.button_font.render(
'Resume Game',
True,
constants.WHITE,
(23, 56, 245) # Main color of the button, tried without this as well
)
self.resume_button.image.blit(
resume,
self.resume_button.rect,
)
我知道代码运行,但你从未看到任何文字。如果我将文本直接显示到我的主屏幕表面,它只会写在我的简历按钮的顶部(当然取决于blit顺序)。我究竟做错了什么?文档似乎表明这是处理它的正确方法,但我还没有找到其他人这样做。任何帮助将不胜感激。
答案 0 :(得分:11)
您是否在convert
的表面上致电Sprite
了?如果没有,最好这样做。
在表面上使用不同的像素格式会导致各种烦人且难以理解的错误。
示例:强>
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 400))
image = pygame.image.load('1.png')
sprite = pygame.sprite.Sprite()
sprite.image = image
sprite.rect = image.get_rect()
font = pygame.font.SysFont('Sans', 50)
text = font.render('This is a text', True, (255, 0, 0))
sprite.image.blit(text, sprite.rect)
group = pygame.sprite.Group()
group.add(sprite)
group.draw(screen)
pygame.display.flip()
print 'bits per pixel:'
print 'image', image.get_bitsize()
print 'screen', screen.get_bitsize()
这将导致以下错误:
<强>输出:强>
bits per pixel
image 8
screen 32
现在更改行
image = pygame.image.load('1.png')
到
image = pygame.image.load('1.png').convert()
一切都会好的:
<强>输出:强>
bits per pixel
image 32
screen 32