Menu
CoddyTech

Vector2

Fa parte della sezione Il game loop del percorso Pygame di Coddy. Lezione 20 di 32.

Una posizione è composta da due numeri, così come una velocità: la velocità in x e la velocità in y. pygame.Vector2 raggruppa due numeri ed esegue operazioni aritmetiche su entrambi contemporaneamente:

pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(150, 90)

pos += vel * dt

vel * dt moltiplica entrambe le componenti e pos += ... le somma entrambe, quindi una sola riga sposta la palla di 150 pixel al secondo verso destra e di 90 verso il basso. pos.x e pos.y leggono o modificano una componente, mentre pygame.draw.circle accetta un Vector2 come centro.

Per far rimbalzare la palla contro una parete, inverti una componente della velocità. Oltrepassato un lato, vel.x = -vel.x rimanda indietro la palla e lascia invariata la velocità verso l'alto o il basso:

if pos.x < 16 or pos.x > 464:
    vel.x = -vel.x

Il raggio della palla è 16, quindi a 16 e 464 il suo bordo tocca i lati della finestra.

challenge icon

Sfida

Medio
  1. Sostituisci x, y con pos = pygame.Vector2(240, 180) e vx, vy con vel = pygame.Vector2(150, 90).
  2. Sposta la palla con pos += vel * dt e disegnala in corrispondenza di pos.
  3. Inverti vel.x quando pos.x è minore di 16 o maggiore di 464, e vel.y quando pos.y è minore di 16 o maggiore di 344.

Provalo tu

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()

Tutte le lezioni di Il game loop

Esercitati da solo: Playground Pygame