Menu
CoddyTech

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

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

Promień piłki wynosi 16, więc przy wartościach 16 i 464 jej krawędź styka się z bokami okna.

challenge icon

Wyzwanie

Średni
  1. Zastąp x, y przez pos = pygame.Vector2(240, 180), a vx, vy przez vel = pygame.Vector2(150, 90).
  2. Poruszaj piłką za pomocą pos += vel * dt i rysuj ją w pos.
  3. Odwróć kierunek vel.x, gdy pos.x jest mniejsze niż 16 lub większe niż 464, a vel.y, gdy pos.y jest 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