Bắt lấy
Bài học 12 trên 41 trong khóa học Tạo trò chơi với Pygame của Coddy.
Hai hình chữ nhật va chạm khi chúng chồng lên nhau. a.colliderect(b) là 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 không an toàn hơn là kiểm tra vị trí chính xác: khối di chuyển mỗi lần 3 pixel có thể nhảy qua ngay giá trị y duy nhất mà bạn kiểm tra.
Thử thách
DễHãy để giỏ hứng khối.
- Sau khi kiểm tra khối bị trượt, 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 bị trượt:
block.y = -20và một giá trịblock.xngẫu nhiên.
Nhấn Chơi và hứng 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 Tạo trò chơi với Pygame
Tự luyện tập: Playground Pygame