Disparar láseres
Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 30 de 36.
La nave dispara láseres directamente hacia arriba. Un láser es un sprite que aparece en la punta de la nave, vuela 10 píxeles por fotograma y se elimina cuando sale de la ventana:
class Laser(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = laser_image
self.rect = self.image.get_rect(midbottom=(x, y))
def update(self):
self.rect.y -= 10
if self.rect.bottom < 0:
self.kill()La punta de la nave es el punto medio de su borde superior, así que un láser nuevo es Laser(player.rect.centerx, player.rect.top): su punto medio inferior queda en ese punto.
Todos los láseres están en un mismo grupo, lasers. Al pulsar la barra espaciadora, se añade uno al grupo en el bucle de eventos, así que cada pulsación dispara una vez. El grupo actualiza y dibuja todos los láseres; dibújalos antes que la nave, para que salgan desde debajo de su punta.
Desafío
Intermedio- Carga
assets/images/laser.pngenlaser_imagey escribe la claseLaserde arriba. - Crea
lasers = pygame.sprite.Group(). - En un evento
KEYDOWNde la barra espaciadora, añadeLaser(player.rect.centerx, player.rect.top)alasers. - En cada fotograma, ejecuta
lasers.update()y dibujalasersantes que la nave.
Pruébalo tú mismo
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Star Patrol")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.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())
player = Player()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
player.update()
screen.fill((12, 14, 30))
screen.blit(player.image, player.rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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 transparentes4Sprites y grupos
La clase SpriteGruposEliminar con kill()Detectar colisiones con spritecollideGrupo contra grupo7Patrulla estelar
La nave de patrullaDisparar láseres2Girar, 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 del juego
Tu primera claseMétodosSelf es el objetoUna lista de objetosObjetos con imágenesUna 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