pygame移动blitted文本

时间:2017-08-11 12:52:32

标签: python python-3.x pygame

我正在使用pygame进行这个游戏,我需要逐个在屏幕上显示一些字母,所以我创建了以下代码:

def suspicious_print(text, font, font_big, t_w, t_h, fill_colour, rect_colour, text_colour):
pygame.font.init()
font = pygame.font.SysFont(font, font_big)
window_disp.fill(fill_colour)
text_print = ""
for letter in text:
    text_print += letter
    render = font.render(text_print, 1, text_colour)
    render_rect = render.get_rect(center = (t_w, t_h))
    pygame.draw.rect(window_disp, rect_colour, render_rect)
    window_disp.blit(render, render_rect)
    pygame.display.update()
    pygame.time.delay(500)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.font.quit()
            pygame.quit()
            quit()

问题是每次出现这些字时,单词都会移动到左侧。如何防止这些词语四处移动并使它们保持静止?

1 个答案:

答案 0 :(得分:1)

由于(t_w, t_h),文字以render_rect = render.get_rect(center = (t_w, t_h))为中心。您不需要居中,而是需要左对齐矩形,并始终将其绘制在同一个位置。

render_rect = render.get_rect()
render_rect.x = t_w
render_rect.y = t_h

如果您希望整个消息在屏幕中心呈现,那么您需要知道两件事:最终渲染文本的大小和屏幕中心的位置。可以使用字体上的pygame.font.Font.size方法找到最终框的大小。在您的情况下,以下行应该有效:

font = pygame.font.SysFont(font, font_big)
box_width, box_height = font.size(text)

然后您可以设置render_rect的位置:

render_rect.x = screen_center_x - box_width / 2
render_rect.y = screen_center_y - box_height / 2

我会把它留给你来获得屏幕的中心。