Gruppi
Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 17 di 36.
Gli sprite si presentano in gruppi numerosi: nemici, laser, monete. Un Gruppo contiene molti sprite e applica la stessa operazione a tutti:
enemies = pygame.sprite.Group()
for i in range(5):
enemies.add(Enemy(64 + i * 128, 60))Due chiamate nel ciclo sostituiscono i cicli che hai scritto su una lista:
enemies.update()
enemies.draw(screen)enemies.update() chiama update() su ogni sprite del gruppo. enemies.draw(screen) esegue il blit di self.image di ogni sprite in corrispondenza del suo self.rect: ecco perché questi due nomi devono essere esatti. Uno sprite in un gruppo non ha bisogno di un proprio metodo di disegno.
Un gruppo conosce anche la propria dimensione, len(enemies), e puoi scorrerlo con for enemy in enemies:. Disegna il gruppo dopo il riempimento, come qualsiasi altra immagine.
Sfida
Medio- Sostituisci
enemycon un gruppo chiamatoenemiescontenente cinque sprite Enemy, centrati in x = 64, 192, 320, 448 e 576, tutti in y = 60. - Chiama
enemies.update()a ogni fotogramma. - Disegnali con
enemies.draw(screen), dopo il riempimento.
Provalo tu
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Group")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
enemy_image = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = ship_image
self.rect = self.image.get_rect(midbottom=(320, 470))
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.rect.x -= 6
if keys[pygame.K_RIGHT]:
self.rect.x += 6
self.rect.clamp_ip(screen.get_rect())
class Enemy(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = enemy_image
self.rect = self.image.get_rect(center=(x, y))
def update(self):
self.rect.y += 3
if self.rect.top > 480:
self.rect.bottom = 0
player = Player()
enemy = Enemy(320, 60)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
player.update()
enemy.update()
screen.fill((20, 22, 40))
screen.blit(enemy.image, enemy.rect)
screen.blit(player.image, player.rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Sprite e immagini
1Caricare immagini
Caricare un'immaginePosizionarla con un rettangoloSpostare l'immagineRipetere uno sfondoPixel trasparenti4Sprite e gruppi
La classe SpriteGruppiRimuovere con kill()Catturare con spritecollideGruppo contro gruppo2Ruota, 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