Menu
CoddyTech

Vector2

Coddy'nin Pygame Journey'sinin Oyun Döngüsü bölümünün bir parçası. Ders 20 / 32.

Konum iki sayıdan oluşur, hız da öyle: x yönündeki hız ve y yönündeki hız. pygame.Vector2 iki sayıyı bir arada tutar ve ikisi üzerinde aynı anda aritmetik işlemler yapar:

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

pos += vel * dt

vel * dt her iki bileşeni de çarpar ve pos += ... her iki bileşeni de toplar; böylece tek bir satır topu saniyede 150 piksel sağa ve 90 piksel aşağı hareket ettirir. pos.x ve pos.y bir bileşeni okur veya değiştirir; pygame.draw.circle ise merkez olarak bir Vector2 alır.

Bir duvardan sekmek için hızın bir bileşeninin yönünü tersine çevir. Bir kenarı geçince vel.x = -vel.x topu geri gönderir ve yukarı-aşağı hızını olduğu gibi bırakır:

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

Topun yarıçapı 16'dır; bu nedenle 16 ve 464 konumlarında kenarı pencerenin yanlarına değer.

challenge icon

Görev

Orta
  1. x, y ifadesini pos = pygame.Vector2(240, 180) ve vx, vy ifadesini vel = pygame.Vector2(150, 90) ile değiştir.
  2. Topu pos += vel * dt ile hareket ettir ve pos konumunda çiz.
  3. pos.x 16'dan küçük veya 464'ten büyük olduğunda vel.x yönünü, pos.y 16'dan küçük veya 344'ten büyük olduğunda vel.y yönünü tersine çevir.

Kendin dene

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

Oyun Döngüsü bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground