Menu
CoddyTech

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 * dt

vel * 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.x

Le rayon de la balle est de 16, donc à 16 et 464, son bord touche les côtés de la fenêtre.

challenge icon

Défi

Moyen
  1. Remplacez x, y par pos = pygame.Vector2(240, 180) et vx, vy par vel = pygame.Vector2(150, 90).
  2. Déplacez la balle avec pos += vel * dt et dessinez-la à pos.
  3. Inversez vel.x lorsque pos.x est inférieur à 16 ou supérieur à 464, et vel.y lorsque pos.y est 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

Entraînez-vous par vous-même : Playground Pygame