Text and Fonts
Text is a vital key to games. pygame has a way to make text. It can be broken down into fonts and text.
Fonts
The first step to displaying text is knowing which font to use. pygame has support for several fonts, such as Arial, Comic Sans, Times New Roman, and more. It all depends on what fonts your system has.
To load the font, we do the following:
ourfont = pygame.font.SysFont(fontname, fontsize)fontnameis the name of the font as astr. For example,"Arial"and"Times New Roman"are valid font names to pass as the first parameter
fontsizeis the size of the font. It should be an integer. For example,32is a valid size (2.0isn't because it isn't an integer)
You should use a positive
fontsize because negative integers lead to extremely small text.So, if we wanted to have the font for our text be Arial and we wanted its size to be 32, then we'd do
ourfont = pygame.font.SysFont("Arial", 32)
Instead of defining a certain font, you can also just get the default font with
pygame.font.get_default_font() in place of fontnameText
Now that we have a font, we need to have the actual text written in that font. So, we call our font's render method.
Here's how the render method works:
(font variable name).render(text: string, antialias: bool, color: tuple, background=None)textis the text that you want to have displayed
antialiasis whether or not to antialias the text
coloris the color that the text should be (use an RGB tuple)
backgroundis the background color. It defaults toNone(no background)
So, if we wanted to say "Hello World!" in white text and not antialias, we'd do the following:
ourtext = ourfont.render("Hello World!", True, (0, 0, 0))
Displaying the Text
Now that we have the text, all we have to do is display it. We use the
(window variable name).blit method. Here's how the blit method works:
(window variable name).blit(source, dest)sourceis the image that you want to display. Note that,ourtextwill actually be an image since the render method returns an image.
destis the destination for the image or text. It can either be a tuple of coordinates (like(30, 30)that represents the top-left pixel for the image to be drawn on. Or, it could be aRectobject or tuple of(top-left x, top-left y, width, height)similar to the ones we showed in 2.3 - Drawing and Moving for the font to be drawn on.
So, if we wanted to display our text and have its top-left corner be at (100, 100), then we'd do:
window.blit(ourtext, (100, 100))
Example
import pygame from pygame.locals import RESIZABLE pygame.init() flag = RESIZABLE window = pygame.display.set_mode((500, 400), flag) pygame.display.set_caption("Text!") WHITE = (255, 255, 255) run = True while run: for event in pygame.event.get(): if event.type == pygame.QUIT: run = False # step 1 to writing: load the font with pygame.font.SysFont(fontname, fontsize) # For font - You can either use the default font # (pygame.font.get_default_font()) or use a font name # (like Comic Sans or Arial). # For size - a positive integer representing the font size. font = pygame.font.SysFont("Arial", 32) # step 2 - render the font with # (font variable name).render( # text: string, antialias: bool, color: tuple, background=None # ) # In this case, we render the text "Hello World!", pass True as antiaalias # and have the color of the text be WHITE text = font.render("Hello World!", True, WHITE) # step 3 - blit to the screen # You can either blit the text to a rectangle on the screen or a specified # coordinate # In this case, we blit (draw) the text with a top-left value of (0, 0) window.blit(text, (100, 100)) # update the screen; just like with moving/displaying rectangles pygame.display.update() pygame.quit()
View code on GitHub.
Practice
Moving Text
Move some text!
The text should start in the upper corner and be moving down and to the right. You can move the text using coordinates or blitz the text on to a moving rectangle. Feel free to be creative with colors, fonts, and font sizes. However, if applicable, make the rectangle proportional to the text, and everything smaller than the screen
Note: you can import the time module as well and use
time.sleep(0.01) in your mainloop to act as a frame cap to make your text more visibleCopyright © 2021 Code 4 Tomorrow. All rights reserved.
The code in this course is licensed under the MIT License.
If you would like to use content from any of our courses, you must obtain our explicit written permission and provide credit. Please contact classes@code4tomorrow.org for inquiries.
