Menu
CoddyTech

Laser abfeuern

Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 30 von 36.

Das Schiff feuert Laser gerade nach oben. Ein Laser ist ein Sprite, das an der Schiffsspitze startet, pro Frame 10 Pixel fliegt und sich selbst entfernt, sobald es das Fenster verlassen hat:

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

Die Schiffsspitze liegt in der Mitte seiner oberen Kante. Ein neuer Laser wird also mit Laser(player.rect.centerx, player.rect.top) erstellt: Seine untere Mitte sitzt auf diesem Punkt.

Alle Laser befinden sich in einer Gruppe, lasers. Wenn die Leertaste gedrückt wird, wird im Ereignisloop ein Laser hinzugefügt, sodass jeder Tastendruck genau einmal feuert. Die Gruppe aktualisiert und zeichnet alle Laser; zeichne sie vor dem Schiff, damit sie unter seiner Spitze hervorkommen.

challenge icon

Aufgabe

Mittel
  1. Lade assets/images/laser.png in laser_image und schreibe die Klasse Laser oben.
  2. Erstelle lasers = pygame.sprite.Group().
  3. Füge bei einem KEYDOWN-Ereignis für die Leertaste Laser(player.rect.centerx, player.rect.top) zu lasers hinzu.
  4. Rufe in jedem Frame lasers.update() auf und zeichne lasers vor dem Raumschiff.

Probier es selbst

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 dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Sprites und Bilder

Übe selbstständig: Pygame-Playground