I am making a would you rather game, and I would like to not have character restrictions for the W.Y.R. questions. I have seen many examples here on Stack Overflow and other websites, but they use other modules and methods I don’t understand how to use or want to use. So I would rather use
button_text_font = pygame.font.Font(font_location, 20) red_button_text = button_text_font.render(red_text, True, bg_color) blue_button_text = button_text_font.render(blue_text, True, bg_color)
I would like to know how to use this method and, for example, somehow input how far the text can go until it wraps to the next line.
Thanks
P.S. If you could, please also include centering text, etc.
Advertisement
Answer
This is adapted from some very old code I wrote:
def renderTextCenteredAt(text, font, colour, x, y, screen, allowed_width): # first, split the text into words words = text.split() # now, construct lines out of these words lines = [] while len(words) > 0: # get as many words as will fit within allowed_width line_words = [] while len(words) > 0: line_words.append(words.pop(0)) fw, fh = font.size(' '.join(line_words + words[:1])) if fw > allowed_width: break # add a line consisting of those words line = ' '.join(line_words) lines.append(line) # now we've split our text into lines that fit into the width, actually # render them # we'll render each line below the last, so we need to keep track of # the culmative height of the lines we've rendered so far y_offset = 0 for line in lines: fw, fh = font.size(line) # (tx, ty) is the top-left of the font surface tx = x - fw / 2 ty = y + y_offset font_surface = font.render(line, True, colour) screen.blit(font_surface, (tx, ty)) y_offset += fh
The basic algorithm is to split the text into words and iteratively build up lines word by word checking the resulting width each time and splitting to a new line when you would exceed the width.
As you can query how wide the rendered text will be, you can figure out where to render it to centre it.