我已经到了在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();
感谢您的时间。
答案 0 :(得分:6)
首先必须创建一个Font
(或SysFont
)对象。在此对象上调用render
方法将返回带有给定文本的Surface
,您可以在屏幕或任何其他Surface
上进行blit。
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
的结果,因为这是一个非常慢的操作。
答案 1 :(得分:0)
嗨! 老实说,有很好的方法可以在当前矩形的任何位置编写文本。 现在我将展示如何轻松做到这一点。
首先我们需要创建 rect 实例的对象:
rect_obj = pygame.draw.rect(
screen,
color,
<your cords and margin goes here>
)
现在 rect_obj
是 pygame.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)
快乐编码! :)