Menu
CoddyTech

Dispare Lasers

Parte da seção Sprites e imagens do Journey de Pygame da Coddy. Lição 30 de 36.

A nave dispara lasers diretamente para cima. Um laser é um sprite que começa na ponta da nave, voa 10 pixels por quadro e se remove assim que sai da janela:

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()

A ponta da nave fica no meio da borda superior, então um novo laser é Laser(player.rect.centerx, player.rect.top): o meio da parte inferior dele fica nesse ponto.

Todos os lasers ficam em um grupo, lasers. Pressionar Espaço adiciona um laser ao grupo no loop de eventos, então cada pressionamento dispara uma vez. O grupo atualiza e desenha todos eles; desenhe-os antes da nave para que saiam de baixo da ponta dela.

challenge icon

Desafio

Médio
  1. Carregue assets/images/laser.png em laser_image e escreva a classe Laser acima.
  2. Crie lasers = pygame.sprite.Group().
  3. Em um evento KEYDOWN para a tecla Espaço, adicione Laser(player.rect.centerx, player.rect.top) a lasers.
  4. A cada quadro, execute lasers.update() e desenhe lasers antes da nave.

Experimente você mesmo

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()
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Sprites e imagens

Pratique por conta própria: Playground de Pygame