Una lista de enemigos
Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 15 de 39.
Un enemigo ahora es un objeto. Los otros dos todavía necesitan sus propios Rects y blits. Pon los tres en una lista, como hizo el campo de estrellas con sus estrellas, y dos bucles cortos los ejecutarán a todos:
enemies = [Enemy(red, 100, 50), Enemy(green, 300, 50)]
for enemy in enemies:
enemy.update()Una lista se puede escribir elemento por elemento entre corchetes, como aquí, o crear con append en un bucle. Cada enemigo de la lista se mueve mediante su propio Rect.
Mantén cada enemigo en la lista una sola vez. Un enemigo que también se actualiza por su cuenta, fuera del bucle, se mueve dos veces en cada fotograma.
Desafío
IntermedioMantén a los tres enemigos en una sola lista.
- Crea
enemies, una lista de tres objetos Enemy: el rojo centrado en(160, 100), el verde en(320, 100)y el amarillo en(480, 100). - Actualiza a todos los enemigos de la lista en el bucle y dibújalos todos después del relleno.
- Elimina
red_enemy, los Rect verdes y amarillos y sus líneas.
Pulsa «Jugar»: caerán tres enemigos como antes. Después, pulsa «Comprobar».
Pruébalo tú mismo
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Rain")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
green = pygame.image.load("assets/images/enemy_green.png").convert_alpha()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert_alpha()
class Enemy:
def __init__(self, image, x, y):
self.image = image
self.rect = image.get_rect(center=(x, y))
self.speed = 2
def update(self):
self.rect.y += self.speed
if self.rect.top > 480:
self.rect.bottom = 0
def draw(self, screen):
screen.blit(self.image, self.rect)
red_enemy = Enemy(red, 160, 100)
green_rect = green.get_rect(center=(320, 100))
yellow_rect = yellow.get_rect(center=(480, 100))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
red_enemy.update()
for rect in (green_rect, yellow_rect):
rect.y += 2
if rect.top > 480:
rect.bottom = 0
screen.fill((20, 22, 40))
red_enemy.draw(screen)
screen.blit(green, green_rect)
screen.blit(yellow, yellow_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Todas las lecciones de Sprites e imágenes
1Cargar imágenes
Cargar una imagenColocarla con un rectánguloMover la imagenRepetir un fondo en mosaicoPíxeles transparentes2Girar, voltear y escalar
Girar alrededor del centroApuntar en la dirección del vueloEscalar una imagenGirar desde la imagen original5Colisiones precisas a nivel de píxel
Los rectángulos parecen injustosMáscarasSprites precisos a nivel de píxelHitboxes circulares3Clases para objetos de juego
Tu primera claseMétodosself es el objetoUna lista de objetosObjetos con imágenesUna lista de enemigosUna subclase6Animación con hojas de sprites
Recortar una hoja de spritesUn contador de fotogramasAnimar con el tiempoUna explosión de una sola vezPractica por tu cuenta: Playground de Pygame