2017-08-11 45 views
1

我對這個遊戲在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() 

的問題是的話都移動到每次出現信件時左側。我怎樣才能防止這些詞語四處移動並讓他們保持靜止?

+0

看起來像是有效地「中心證明」每次渲染文本變長時移動它的文本。如果你想讓它保持靜止,你需要「左對齊」。突出的線是'render.get_rect(center =(t_w,t_h))'。也許你可以刪除它,它會工作? –

回答

1

由於render_rect = render.get_rect(center = (t_w, t_h)),文字圍繞(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 

我會讓你來得到屏幕的中央。

+0

非常感謝很多男人真的幫助我擺脫了這種艱難的境地。 –

+0

@SnailingGoat很樂意幫忙。如果它適合你,請標記爲正確。 –

+0

在這裏,你去的人!再次感謝! –