Rimuovere con kill()
Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 18 di 36.
Premi Spazio e la nave spara: ogni pressione aggiunge uno sprite Laser al gruppo lasers e il contatore in alto a sinistra indica quanti ne contiene il gruppo. Spara qualche colpo e guarda il contatore aumentare. I laser volano fuori dalla parte superiore e non si vedono più, ma il gruppo li contiene ancora tutti e continua ad aggiornarli e disegnarli. Dopo qualche minuto di gioco, sono migliaia di laser invisibili.
Uno sprite che ha terminato il suo compito si rimuove con kill():
def update(self):
self.rect.y -= 10
if self.rect.bottom < 0:
self.kill()kill() rimuove lo sprite da tutti i gruppi di cui fa parte. Non viene più aggiornato né disegnato, e Python lo libera quando nessuna variabile vi fa più riferimento. Controlla bottom, non top: il laser scompare quando il suo ultimo pixel ha lasciato la finestra, mai mentre una sua parte è ancora visibile.
sprite.alive() è True mentre uno sprite si trova in almeno un gruppo.
Sfida
FacileIn Laser.update, dopo averlo spostato, chiama self.kill() quando rect.bottom del laser si trova sopra il bordo superiore della finestra (minore di 0). Il contatore dovrebbe tornare a 0 quando tutti i laser sono usciti.
Provalo tu
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Lasers")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
laser_image = pygame.image.load("assets/images/laser.png").convert_alpha()
font = pygame.font.Font(None, 32)
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())
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
player = Player()
lasers = pygame.sprite.Group()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
lasers.add(Laser(player.rect.centerx, player.rect.top))
player.update()
lasers.update()
screen.fill((20, 22, 40))
lasers.draw(screen)
screen.blit(player.image, player.rect)
count = font.render(f"Lasers: {len(lasers)}", True, (240, 240, 240))
screen.blit(count, (10, 10))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tutte le lezioni di Sprite e immagini
1Caricare immagini
Caricare un'immaginePosizionarla con un rettangoloSpostare l'immagineRipetere uno sfondoPixel trasparenti4Sprite e gruppi
La classe SpriteGruppiRimuovere con kill()Catturare con spritecollideGruppo contro gruppo2Ruota, capovolgi, ridimensiona
Ruotare attorno al centroRivolgiti nella direzione in cui voliRidimensionare un'immagineRuotare dall'originale3Classi per gli oggetti del gioco
La tua prima classeMetodiSelf è l’oggettoUna lista di oggettiOggetti con immaginiUna sottoclasse6Animazione con gli sprite sheet
Ritagliare uno sprite sheetUn contatore di frameAnimare con il tempoUn’esplosione a riproduzione singolaEsercitati da solo: Playground Pygame