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 * dtvel * 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.xTopun yarıçapı 16'dır; bu nedenle 16 ve 464 konumlarında kenarı pencerenin yanlarına değer.
Görev
Ortax, yifadesinipos = pygame.Vector2(240, 180)vevx, vyifadesinivel = pygame.Vector2(150, 90)ile değiştir.- Topu
pos += vel * dtile hareket ettir veposkonumunda çiz. pos.x16'dan küçük veya 464'ten büyük olduğundavel.xyönünü,pos.y16'dan küçük veya 344'ten büyük olduğundavel.yyö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
1Bir Kareyi Hareket Ettir
Bir Pencere AçArka Planı Doldur4Zamana Göre Hareket
Delta ZamanıSaniyedeki Piksel SayısıVector2İvme ve SürtünmeEkranın Bir Kenarından Çıkıp Diğerinden GirmeKendi başına pratik yap: Pygame playground