9

我已经在 pygame 中绘制了一个矩形,但是我需要能够将“Hello”之类的文本放入该矩形中。我怎样才能做到这一点?(如果你也能解释一下,那将不胜感激。谢谢你)

这是我的代码:

import pygame
import sys
from pygame.locals import *

white = (255,255,255)
black = (0,0,0)


class Pane(object):
    def __init__(self):

        pygame.init()
        pygame.display.set_caption('Box Test')
        self.screen = pygame.display.set_mode((600,400), 0, 32)
        self.screen.fill((white))
        pygame.display.update()

    def addRect(self):
        self.rect = pygame.draw.rect(self.screen, (black), (175, 75, 200, 100), 2)
        pygame.display.update()

    def addText(self):
        #This is where I want to get the text from

if __name__ == '__main__':
    Pan3 = Pane()
    Pan3.addRect()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit(); sys.exit();

感谢您的时间。

4

2 回答 2

10

您首先必须创建一个Font(或SysFont)对象。在此对象上调用该render方法将返回Surface带有给定文本的 a,您可以在屏幕上或任何其他Surface.

import pygame
import sys
from pygame.locals import *

white = (255,255,255)
black = (0,0,0)


class Pane(object):
    def __init__(self):
        pygame.init()
        self.font = pygame.font.SysFont('Arial', 25)
        pygame.display.set_caption('Box Test')
        self.screen = pygame.display.set_mode((600,400), 0, 32)
        self.screen.fill((white))
        pygame.display.update()


    def addRect(self):
        self.rect = pygame.draw.rect(self.screen, (black), (175, 75, 200, 100), 2)
        pygame.display.update()

    def addText(self):
        self.screen.blit(self.font.render('Hello!', True, (255,0,0)), (200, 100))
        pygame.display.update()

if __name__ == '__main__':
    Pan3 = Pane()
    Pan3.addRect()
    Pan3.addText()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit(); sys.exit();

在此处输入图像描述

请注意,您的代码似乎有点奇怪,因为通常您在主循环中完成所有绘图,而不是事先。此外,当您在程序中大量使用文本时,请考虑缓存 的结果Font.render,因为这是一个非常慢的操作。

于 2013-10-01T13:16:03.300 回答
0

你好! 老实说,在当前矩形的任何地方都有很好的方法来编写文本。现在我将展示如何很容易地做到这一点。


首先,我们需要创建 rect 实例的对象:

                rect_obj = pygame.draw.rect(
                    screen,
                    color,
                    <your cords and margin goes here>
                )

现在rect_objpygame.rect实例对象。因此,我们可以自由地使用这种方法进行操作。但是,事先让我们像这样创建我们渲染的文本对象:

                text_surface_object = pygame.font.SysFont(<your font here>, <font size here>).render(
                    <text>, True, <color>
                )

毕竟,正如我之前提到的,我们可以自由地使用所有方法进行操作: text_rect = text_surface_object.get_rect(center=rect_obj.center)

这段代码是关于什么的?我们刚刚得到了当前矩形的中心线,太容易了!现在,你需要像这样对你的屏幕进行 blit: self.game_screen.blit(text_surface_object, text_rect)


快乐编码!:)

于 2021-05-09T14:00:59.520 回答