Menu
CoddyTech

Spara con i laser

Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 30 di 36.

La nave spara laser dritti verso l'alto. Un laser è uno sprite che parte dalla punta della nave, vola a 10 pixel per fotogramma e si rimuove una volta uscito dalla finestra:

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 della nave è il centro del suo bordo superiore, quindi un nuovo laser è Laser(player.rect.centerx, player.rect.top): il suo punto medio inferiore si trova su quel punto.

Tutti i laser vivono in un unico gruppo, lasers. Premendo la barra spaziatrice se ne aggiunge uno al gruppo, nel ciclo degli eventi, così ogni pressione spara una volta. Il gruppo li aggiorna e li disegna tutti; disegnali prima della nave, così escono da sotto la sua punta.

challenge icon

Sfida

Medio
  1. Carica assets/images/laser.png in laser_image e scrivi la classe Laser qui sopra.
  2. Crea lasers = pygame.sprite.Group().
  3. In caso di evento KEYDOWN per Space, aggiungi Laser(player.rect.centerx, player.rect.top) a lasers.
  4. A ogni fotogramma, esegui lasers.update() e disegna lasers prima dell'astronave.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Sprite e immagini

Esercitati da solo: Playground Pygame