2017-08-11 2 views
1

ich auf dieses Spiel in pygame arbeite und ich brauche ein paar Buchstaben auf dem Bildschirm eine nach der anderen blitten so dass ich den folgenden Code erstellt:pygame Bewegen Blitted Text

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() 

Das Problem ist, die Worte bewegen sich zu die linke Seite jedes Mal, wenn der Buchstabe erscheint. Wie kann ich verhindern, dass sich die Wörter bewegen und ruhig bleiben?

+0

Sieht so aus, als ob Sie effektiv den Text "zentrieren", der ihn jedes Mal verschiebt, wenn der gerenderte Text länger wird. Sie müssen "linksbündig", wenn Sie möchten, dass es still bleibt. Die hervorstechende Zeile ist 'render.get_rect (center = (t_w, t_h))'. Vielleicht können Sie das einfach entfernen und es wird funktionieren? –

Antwort

1

Der Text wird um (t_w, t_h) wegen render_rect = render.get_rect(center = (t_w, t_h)) zentriert. Anstatt zu zentrieren, müssen Sie das Rechteck links ausrichten und immer an der gleichen Stelle zeichnen.

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

Wenn Sie möchten, die gesamte Nachricht in der Mitte des Bildschirms zu erbringenden dann müssen Sie zwei Dinge wissen: die Größe des endgültigen gerenderter Text und die Position der Mitte des Bildschirms. Die Größe der endgültigen Box kann mit der Methode pygame.font.Font.size für Ihre Schriftart gefunden werden. In Ihrem Fall sollten die folgenden Zeilen arbeiten:

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

Dann können Sie die Position von render_rect einstellen:

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

Ich werde es Ihnen überlassen, um die Mitte des Bildschirms zu bekommen.

+0

Vielen Dank Mann wirklich half mir aus dieser schäbigen Situation. –

+0

@SnailingGoat froh zu helfen. Als korrekt markieren, wenn es für Sie funktioniert. –

+0

Hier gehts Mann! Danke noch einmal! –