Attrape-le
Fait partie de la section La boucle de jeu du Journey Pygame de Coddy. Leçon 26 sur 32.
Deux rectangles entrent en collision lorsqu’ils se chevauchent. a.colliderect(b) vaut True lorsque Rect a et Rect b se chevauchent, même d’un seul pixel.
if block.colliderect(basket):
block.y = -20
block.x = random.randint(0, 460)Un bloc attrapé retourne en haut, comme un bloc manqué. Tester le chevauchement est plus sûr que de tester des positions exactes : un bloc qui se déplace de 3 pixels à la fois peut passer directement au-dessus de la seule valeur y que tu testes.
Défi
FacileAprès la vérification du bloc manqué, lorsque le bloc entre en collision avec le panier, renvoie-le en haut : block.y = -20 et attribue une valeur aléatoire à block.x, comme pour un bloc manqué.
Essayez vous-même
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()
Toutes les leçons de La boucle de jeu
1Déplacer un carré
Ouvrir une fenêtreRemplir l’arrière-plan4Déplacement en fonction du temps
Temps deltaPixels par secondeVector2Accélération et frictionBoucler autour de l’écranEntraînez-vous par vous-même : Playground Pygame