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.
Aufgabe
Mittel- Lade
assets/images/laser.pnginlaser_imageund schreibe die KlasseLaseroben. - Erstelle
lasers = pygame.sprite.Group(). - Füge bei einem
KEYDOWN-Ereignis für die LeertasteLaser(player.rect.centerx, player.rect.top)zulasershinzu. - Rufe in jedem Frame
lasers.update()auf und zeichnelasersvor 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()
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
1Bilder laden
Ein Bild ladenMit einem Rect platzierenDas Bild bewegenEinen Hintergrund kachelnTransparente Pixel4Spriters und Gruppen
Die Sprite-KlasseGruppenMit kill() entfernenMit spritecollide abfangenGruppe gegen Gruppe7Sternenpatrouille
Das PatrouillenschiffLaser abfeuern2Drehen, Spiegeln, Skalieren
Um den Mittelpunkt drehenIn Flugrichtung ausrichtenEin Bild skalierenVom Original aus drehen3Klassen für Spielobjekte
Deine erste KlasseMethodenSelf ist das ObjektEine Liste von ObjektenObjekte mit BildernEine Unterklasse6Animation mit Sprite Sheets
Ein Sprite Sheet zuschneidenEin Frame-ZählerMit Zeit animierenEine einmalige ExplosionÜbe selbstständig: Pygame-Playground