Menu
CoddyTech

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.

challenge icon

Thử thách

Dễ

Thả một khối từ trên xuống.

  1. Bên dưới giỏ, tạo block = pygame.Rect(220, 0, 20, 20).
  2. Trong vòng lặp, sau khi giỏ di chuyển, cộng 3 vào block.y.
  3. 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