We will load an image and use NumPy again to define a clockwise path around the screen.
clock = pygame.time.Clock()
img = pygame.image.load('head.jpg')
right
, down
, left
, and up
. Each of these sections will have 40
equidistant steps. Initialize all the values in the sections to 0
:steps = np.linspace(20, 360, 40).astype(int) right = np.zeros((2, len(steps))) down = np.zeros((2, len(steps))) left = np.zeros((2, len(steps))) up = np.zeros((2, len(steps)))
[::-1]
notation leads to reversing the order of the array elements:right[0] = steps right[1] = 20 down[0] = 360 down[1] = steps left[0] = steps[::-1] left[1] = 360 up[0] = 20 up[1] = steps[::-1]
T
operator because they are not aligned properly for concatenation:pos = np.concatenate((right.T, down.T, left.T, up.T))
clock.tick(30)
A screenshot of the moving head is as follows:
You should be able to watch a movie of this animation at https://www.youtube.com/watch?v=m2TagGiq1fs, and it is also part of the code bundle (animation.mp4
).
The code of this example uses almost everything we have learnt so far, but should still be simple enough to understand:
import pygame, sys from pygame.locals import * import numpy as np pygame.init() clock = pygame.time.Clock() screen = pygame.display.set_mode((400, 400)) pygame.display.set_caption('Animating Objects') img = pygame.image.load('head.jpg') steps = np.linspace(20, 360, 40).astype(int) right = np.zeros((2, len(steps))) down = np.zeros((2, len(steps))) left = np.zeros((2, len(steps))) up = np.zeros((2, len(steps))) right[0] = steps right[1] = 20 down[0] = 360 down[1] = steps left[0] = steps[::-1] left[1] = 360 up[0] = 20 up[1] = steps[::-1] pos = np.concatenate((right.T, down.T, left.T, up.T)) i = 0 while True: # Erase screen screen.fill((255, 255, 255)) if i >= len(pos): i = 0 screen.blit(img, pos[i]) i += 1 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() pygame.display.update() clock.tick(30)
We learned a bit about animation in this section. The most important concept we learned about is the clock. The following table describes the new functions we used: