Vector2
Część sekcji Pętla gry ścieżki Pygame w Coddy. Lekcja 20 z 32.
Pozycja składa się z dwóch liczb, podobnie jak prędkość: prędkości w osi x i prędkości w osi y. pygame.Vector2 przechowuje razem dwie liczby i wykonuje działania arytmetyczne na obu jednocześnie:
pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(150, 90)
pos += vel * dtvel * dt mnoży obie składowe, a pos += ... dodaje obie składowe, więc jedna linijka przesuwa piłkę w prawo o 150 pikseli na sekundę i w dół o 90 pikseli na sekundę. pos.x i pos.y odczytują lub zmieniają jedną składową, a pygame.draw.circle przyjmuje Vector2 jako środek.
Aby odbić piłkę od ściany, odwróć jedną składową prędkości. Po przekroczeniu krawędzi vel.x = -vel.x zawraca piłkę, nie zmieniając jej prędkości w górę ani w dół:
if pos.x < 16 or pos.x > 464:
vel.x = -vel.xPromień piłki wynosi 16, więc przy wartościach 16 i 464 jej krawędź styka się z bokami okna.
Wyzwanie
Średni- Zastąp
x, yprzezpos = pygame.Vector2(240, 180), avx, vyprzezvel = pygame.Vector2(150, 90). - Poruszaj piłką za pomocą
pos += vel * dti rysuj ją wpos. - Odwróć kierunek
vel.x, gdypos.xjest mniejsze niż 16 lub większe niż 464, avel.y, gdypos.yjest mniejsze niż 16 lub większe niż 344.
Spróbuj swoich sił
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()
Wszystkie lekcje w sekcji Pętla gry
Poćwicz samodzielnie: Edytor online Pygame