Menu
CoddyTech

Tirer des lasers

Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 30 sur 36.

Le vaisseau tire des lasers tout droit vers le haut. Un laser est un sprite qui démarre au nez du vaisseau, parcourt 10 pixels par image et se supprime dès qu’il sort de la fenêtre :

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

Le nez du vaisseau se trouve au milieu de son bord supérieur. Un nouveau laser est donc créé avec Laser(player.rect.centerx, player.rect.top) : son milieu inférieur se trouve sur ce point.

Tous les lasers sont réunis dans un seul groupe, lasers. Une pression sur la barre d’espace en ajoute un au groupe dans la boucle d’événements, de sorte que chaque pression déclenche un tir. Le groupe les met tous à jour et les dessine ; dessine-les avant le vaisseau, pour qu’ils jaillissent de sous son nez.

challenge icon

Défi

Moyen
  1. Chargez assets/images/laser.png dans laser_image et écrivez la classe Laser ci-dessus.
  2. Créez lasers = pygame.sprite.Group().
  3. Lors d’un événement KEYDOWN pour la barre d’espace, ajoutez Laser(player.rect.centerx, player.rect.top) à lasers.
  4. À chaque image, appelez lasers.update() et dessinez lasers avant le vaisseau.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Sprites et images

Entraînez-vous par vous-même : Playground Pygame