Bắt lấy
Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 29 trên 35.
Hai hình chữ nhật va chạm khi chúng chồng lên nhau. a.colliderect(b) trả về True khi Rect a và Rect b chồng lên nhau, dù chỉ một pixel.
if block.colliderect(basket):
block.y = -20
block.x = random.randint(0, 460)Khối được bắt sẽ quay lại phía trên cùng, giống như khối bị bỏ lỡ. Kiểm tra xem chúng có chồng lên nhau an toàn hơn là kiểm tra vị trí chính xác: một khối di chuyển mỗi lần 3 pixel có thể vượt qua đúng giá trị y mà bạn kiểm tra.
Thử thách
DễHãy để chiếc giỏ bắt khối.
- Sau khi kiểm tra khối bị bỏ lỡ, hãy kiểm tra
block.colliderect(basket). - Khi điều kiện này đúng, đưa khối trở lại đầu màn hình như khi khối bị bỏ lỡ:
block.y = -20và một giá trị ngẫu nhiên choblock.x.
Nhấn Chơi và bắt một khối: khối sẽ trở lại đầu màn hình. Sau đó nhấn Kiểm tra.
Tự làm thử
import random
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)
block = pygame.Rect(220, 0, 20, 20)
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())
block.y += 3
if block.top > 360:
block.y = -20
block.x = random.randint(0, 460)
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), basket)
pygame.draw.rect(screen, (235, 80, 80), block)
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