Vector2
Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 23 trên 35.
Vị trí gồm hai số, vận tốc cũng vậy: tốc độ theo trục x và tốc độ theo trục y. pygame.Vector2 giữ hai số cùng nhau và thực hiện phép tính trên cả hai cùng lúc:
pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(150, 90)
pos += vel * dtvel * dt nhân cả hai thành phần, còn pos += ... cộng cả hai thành phần, vì vậy một dòng lệnh giúp bóng di chuyển sang phải 150 pixel mỗi giây và đi xuống 90 pixel mỗi giây. pos.x và pos.y đọc hoặc thay đổi từng thành phần, còn pygame.draw.circle nhận một Vector2 làm tâm.
Để bóng bật khỏi tường, hãy đổi chiều một thành phần của vận tốc. Khi bóng vượt qua một cạnh, vel.x = -vel.x đưa bóng bật ngược lại mà không ảnh hưởng đến tốc độ đi lên và đi xuống:
if pos.x < 16 or pos.x > 464:
vel.x = -vel.xBán kính của bóng là 16, nên ở vị trí 16 và 464, mép bóng vừa chạm hai cạnh của cửa sổ.
Thử thách
Trung bìnhCho quả bóng nảy quanh cửa sổ bằng hai Vector2.
- Thay
x, ybằngpos = pygame.Vector2(240, 180)vàvx, vybằngvel = pygame.Vector2(150, 90). - Di chuyển quả bóng bằng
pos += vel * dtvà vẽ nó tạipos. - Đảo chiều
vel.xkhipos.xnhỏ hơn 16 hoặc lớn hơn 464, và đảo chiềuvel.ykhipos.ynhỏ hơn 16 hoặc lớn hơn 344.
Nhấn Chơi: quả bóng nảy quanh cửa sổ. Sau đó nhấn Kiểm tra.
Tự làm thử
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()
Tất cả bài học trong Vòng lặp trò chơi
1Di chuyển hình vuông
Mở cửa sổTô nền4Di chuyển theo thời gian
Thời gian deltaPixel mỗi giâyVector2Gia tốc và ma sátDi chuyển vòng quanh màn hìnhTự luyện tập: Playground Pygame