Vector2
Termasuk bagian Perulangan Game dalam perjalanan Pygame di Coddy. Pelajaran 20 dari 32.
Posisi terdiri dari dua angka, begitu juga kecepatan: kecepatan pada sumbu x dan kecepatan pada sumbu y. pygame.Vector2 menyimpan dua angka bersama dan melakukan operasi aritmetika pada keduanya sekaligus:
pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(150, 90)
pos += vel * dtvel * dt mengalikan kedua komponennya dan pos += ... menjumlahkan kedua komponennya, jadi satu baris menggerakkan bola 150 piksel per detik ke kanan dan 90 piksel ke bawah. pos.x dan pos.y membaca atau mengubah satu komponen, dan pygame.draw.circle menerima Vector2 sebagai titik pusatnya.
Untuk memantul dari dinding, balikkan satu komponen kecepatan. Saat melewati salah satu sisi, vel.x = -vel.x mengirim bola kembali dan membiarkan kecepatannya ke atas dan ke bawah tetap sama:
if pos.x < 16 or pos.x > 464:
vel.x = -vel.xJari-jari bola adalah 16, jadi pada posisi 16 dan 464, tepinya menyentuh sisi jendela.
Tantangan
Sedang- Ganti
x, ydenganpos = pygame.Vector2(240, 180)danvx, vydenganvel = pygame.Vector2(150, 90). - Gerakkan bola dengan
pos += vel * dtdan gambar bola dipos. - Balikkan arah
vel.xsaatpos.xkurang dari 16 atau lebih dari 464, danvel.ysaatpos.ykurang dari 16 atau lebih dari 344.
Coba sendiri
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()
Semua pelajaran di Perulangan Game
1Gerakkan Persegi
Buka JendelaIsi Latar Belakang4Bergerak Berdasarkan Waktu
Delta WaktuPiksel per DetikVector2Percepatan dan GesekanBerputar Kembali di LayarLatihan sendiri: Playground Pygame