gpt4 book ai didi

python - 无法让pygame字体在图像上呈现

转载 作者:行者123 更新时间:2023-11-28 19:50:31 24 4
gpt4 key购买 nike

我找到了很多使用 pygame 及其字体库的教程,但它们都显示了完全相同的内容。它们都向您展示了如何在背景上写一些纯文本,这很棒,但除此之外,我发现的有用信息并不多。

在我正在处理的项目中,我将菜单按钮实现为 sprite。当您将鼠标悬停在它们上方时,它们会改变颜色,并且一切正常。我想做的是在这些按钮上写文字,但我不知道该怎么做。从文档中 font.render 是这样工作的:

“这将创建一个新的 Surface,并在其上呈现指定的文本。Pygame 不提供直接在现有 Surface 上绘制文本的方法:相反,您必须使用 Font.render - 在新的 Surface 上绘制文本以创建图像(Surface ) 的文本,然后将此图像 blit 到另一个 Surface 上。”

所以我尝试获取附加到我的 sprite 上的图像,然后直接将我的文本 blit 到它上面。这似乎几乎什么都不做:

    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 到我的主屏幕表面,它只会写在我的恢复按钮的顶部(当然取决于 blit 顺序)。我究竟做错了什么?文档似乎表明这是处理它的正确方法,但我还没有找到其他人这样做。任何帮助将不胜感激。

最佳答案

你打过电话吗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()

这将导致以下错误:

without convert

输出:

bits per pixel
image 8
screen 32

现在换行

image = pygame.image.load('1.png')

image = pygame.image.load('1.png').convert()

一切都会好起来的:

with convert

输出:

bits per pixel
image 32
screen 32

关于python - 无法让pygame字体在图像上呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11386107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com