Menu
CoddyTech

Vector2

Teil des Abschnitts Die Spielschleife der Pygame-Journey von Coddy. Lektion 20 von 32.

Eine Position besteht aus zwei Zahlen, und eine Geschwindigkeit ebenfalls: der Geschwindigkeit in x-Richtung und der Geschwindigkeit in y-Richtung. pygame.Vector2 fasst zwei Zahlen zusammen und führt Rechenoperationen auf beiden gleichzeitig aus:

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

pos += vel * dt

vel * dt multipliziert beide Komponenten und pos += ... addiert beide Komponenten, sodass eine Zeile den Ball mit 150 Pixeln pro Sekunde nach rechts und 90 nach unten bewegt. Mit pos.x und pos.y kannst du eine Komponente auslesen oder ändern, und pygame.draw.circle verwendet einen Vector2 als Mittelpunkt.

Damit der Ball von einer Wand abprallt, kehrst du eine Komponente der Geschwindigkeit um. Ist der Ball über eine Seitenwand hinaus, schickt vel.x = -vel.x ihn zurück und lässt seine Geschwindigkeit nach oben und unten unverändert:

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

Der Radius des Balls beträgt 16, sodass seine Kante bei 16 und 464 die Seiten des Fensters berührt.

challenge icon

Aufgabe

Mittel
  1. Ersetze x, y durch pos = pygame.Vector2(240, 180) und vx, vy durch vel = pygame.Vector2(150, 90).
  2. Bewege den Ball mit pos += vel * dt und zeichne ihn an pos.
  3. Kehre vel.x um, wenn pos.x kleiner als 16 oder größer als 464 ist, und vel.y, wenn pos.y kleiner als 16 oder größer als 344 ist.

Probier es selbst

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

Alle Lektionen in Die Spielschleife

Übe selbstständig: Pygame-Playground