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 * dtvel * 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.xDer Radius des Balls beträgt 16, sodass seine Kante bei 16 und 464 die Seiten des Fensters berührt.
Aufgabe
Mittel- Ersetze
x, ydurchpos = pygame.Vector2(240, 180)undvx, vydurchvel = pygame.Vector2(150, 90). - Bewege den Ball mit
pos += vel * dtund zeichne ihn anpos. - Kehre
vel.xum, wennpos.xkleiner als 16 oder größer als 464 ist, undvel.y, wennpos.ykleiner 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
1Bewege ein Quadrat
Öffne ein FensterFülle den Hintergrund4Bewegung nach Zeit
Delta-ZeitPixel pro SekundeVector2Beschleunigung und ReibungAm Bildschirmrand umkehrenÜbe selbstständig: Pygame-Playground