I rettangoli sembrano ingiusti
Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 21 di 36.
Fai volare la nave verso la palla chiodata con i tasti freccia. Le collisioni tra Rect, colliderect, sono veloci e semplici, ma con una palla rotonda ingannano. Il Rect della palla è il quadrato che la circonda, con gli angoli trasparenti e tutto il resto, e il Rect della nave ha uno spazio vuoto accanto alla punta.
Rendi visibile il test: traccia il contorno del Rect della palla e colora il contorno in base a ciò che dice colliderect.
if ship_rect.colliderect(ball_rect):
colour = (230, 60, 60)
else:
colour = (90, 90, 120)
pygame.draw.rect(screen, colour, ball_rect, 2)Poi avvicinati alla palla da sud-est. Il contorno diventa rosso mentre tra la nave e gli spuntoni c'è ancora un chiaro spazio di cielo: gli angoli dei due Rect si sovrappongono, ma non le immagini. In un gioco questo significa perdere una vita per niente, e i giocatori se ne accorgono.
Le lezioni successive mettono alla prova le immagini stesse.
Sfida
FacileDopo aver disegnato la palla e l’astronave, traccia il contorno di ball_rect, largo 2 pixel: rosso (230, 60, 60) mentre ship_rect collide con esso, grigio (90, 90, 120) altrimenti. Poi fai entrare l’astronave dall’angolo in basso a destra e osserva gli angoli.
Provalo tu
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Near Miss")
clock = pygame.time.Clock()
ship = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship.get_rect(topleft=(420, 320))
ball = pygame.image.load("assets/images/spike_ball.png").convert_alpha()
ball_rect = ball.get_rect(center=(320, 240))
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]:
ship_rect.x -= 4
if keys[pygame.K_RIGHT]:
ship_rect.x += 4
if keys[pygame.K_UP]:
ship_rect.y -= 4
if keys[pygame.K_DOWN]:
ship_rect.y += 4
screen.fill((20, 22, 40))
screen.blit(ball, ball_rect)
screen.blit(ship, ship_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tutte le lezioni di Sprite e immagini
1Caricare immagini
Caricare un'immaginePosizionarla con un rettangoloSpostare l'immagineRipetere uno sfondoPixel trasparenti2Ruota, capovolgi, ridimensiona
Ruotare attorno al centroRivolgiti nella direzione in cui voliRidimensionare un'immagineRuotare dall'originale3Classi per gli oggetti del gioco
La tua prima classeMetodiSelf è l’oggettoUna lista di oggettiOggetti con immaginiUna sottoclasse6Animazione con gli sprite sheet
Ritagliare uno sprite sheetUn contatore di frameAnimare con il tempoUn’esplosione a riproduzione singolaEsercitati da solo: Playground Pygame