Khối đang rơi
Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 27 trên 35.
Một vật đang rơi là vật có tọa độ y tăng lên sau mỗi khung hình. Tạo hình chữ nhật cho khối vuông và tăng tọa độ y của nó trong mỗi lượt lặp:
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 vuông 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ư Move a Square, chứ không dùng dt. Rect chỉ lưu số nguyên, nên một bước như 0.6 pixel sẽ bị làm tròn thành 0 và Rect sẽ 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 vuông 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 cái rổ, tạo
block = pygame.Rect(220, 0, 20, 20). - Trong vòng lặp, sau khi cái rổ di chuyển, cộng 3 vào
block.y. - Vẽ khối màu đỏ
(235, 80, 80)sau cái rổ.
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 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