Khối rơi
Bài học 10 trên 41 trong khóa học Tạo trò chơi với Pygame của Coddy.
Vật rơi là vật có tọa độ y tăng lên sau mỗi khung hình. Hãy tạo khối này dưới dạng Rect nữa, rồi tăng tọa độ y của nó sau mỗi lượt lặp (loop):
block = pygame.Rect(220, 0, 20, 20)
while running:
# sự kiện và các phím
block.y += 3
# tô nền, vẽỞ tốc độ 60 khung hình mỗi giây, 3 pixel mỗi khung hình tương đương 180 pixel mỗi giây. Cửa sổ cao 360 pixel, nên khối này mất hai giây để chạm đáy.
Trò chơi này di chuyển theo từng khung hình, giống như bài học Di chuyển một hình vuông, chứ không dựa trên dt. Rect chỉ lưu số nguyên, nên một bước di chuyển như 0.6 pixel sẽ bị làm tròn xuống 0 và Rect không bao giờ di chuyển. Các trò chơi di chuyển Rect theo thời gian sẽ lưu vị trí trong Vector2 rồi sao chép vị trí đó vào Rect.
Khối này tiếp tục rơi sau khi ra khỏi cửa sổ. Hiện chưa có gì ngăn nó lại; bài học tiếp theo sẽ đưa nó trở lại.
Thử thách
DễThả một khối từ trên xuống.
- Bên dưới giỏ, tạo
block = pygame.Rect(220, 0, 20, 20). - Trong vòng lặp, sau khi giỏ di chuyển, cộng 3 vào
block.y. - Vẽ khối màu đỏ
(235, 80, 80)sau giỏ.
Nhấn “Chơi”: một khối màu đỏ rơi từ trên xuống. 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("Catch the Blocks")
clock = pygame.time.Clock()
basket = pygame.Rect(200, 330, 80, 16)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
basket.x -= 8
if keys[pygame.K_RIGHT]:
basket.x += 8
basket.clamp_ip(screen.get_rect())
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), basket)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tất cả bài học trong Tạo trò chơi với Pygame
Tự luyện tập: Playground Pygame