Vector2
Fait partie de la section La boucle de jeu du Journey Pygame de Coddy. Leçon 20 sur 32.
Une position est composée de deux nombres, tout comme une vitesse : la vitesse selon x et la vitesse selon y. pygame.Vector2 regroupe deux nombres et effectue les opérations arithmétiques sur les deux à la fois :
pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(150, 90)
pos += vel * dtvel * dt multiplie les deux composantes et pos += ... les additionne toutes les deux, donc une seule ligne déplace la balle de 150 pixels par seconde vers la droite et de 90 vers le bas. pos.x et pos.y permettent de lire ou de modifier une composante, et pygame.draw.circle prend un Vector2 comme centre.
Pour rebondir sur un mur, inverse une composante de la vitesse. Au-delà d’un côté, vel.x = -vel.x renvoie la balle dans l’autre sens sans modifier sa vitesse verticale :
if pos.x < 16 or pos.x > 464:
vel.x = -vel.xLe rayon de la balle est de 16, donc à 16 et 464, son bord touche les côtés de la fenêtre.
Défi
Moyen- Remplacez
x, yparpos = pygame.Vector2(240, 180)etvx, vyparvel = pygame.Vector2(150, 90). - Déplacez la balle avec
pos += vel * dtet dessinez-la àpos. - Inversez
vel.xlorsquepos.xest inférieur à 16 ou supérieur à 464, etvel.ylorsquepos.yest inférieur à 16 ou supérieur à 344.
Essayez vous-même
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Bounce")
clock = pygame.time.Clock()
x, y = 240, 180
vx, vy = 150, 90
dt = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
x += vx * dt
y += vy * dt
screen.fill((30, 30, 46))
pygame.draw.circle(screen, (80, 160, 255), (x, y), 16)
pygame.display.flip()
dt = clock.tick(60) / 1000
pygame.quit()
Toutes les leçons de La boucle de jeu
1Déplacer un carré
Ouvrir une fenêtreRemplir l’arrière-plan4Déplacement en fonction du temps
Temps deltaPixels par secondeVector2Accélération et frictionBoucler autour de l’écranEntraînez-vous par vous-même : Playground Pygame