Menu
CoddyTech

La classe Sprite

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

Finora tutti gli oggetti di gioco hanno avuto un’immagine, un Rect, un update e un modo per essere disegnati. pygame ha una classe creata proprio per questo: pygame.sprite.Sprite. I tuoi oggetti di gioco diventano sottoclassi di questa classe:

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

Tre regole. Chiama prima super().__init__(): configura ciò di cui la classe Sprite ha bisogno al suo interno. Chiama l’immagine self.image e la posizione self.rect, esattamente così: il codice di pygame legge questi due nomi. Inserisci le regole da applicare a ogni fotogramma in update.

L’immagine dell’astronave viene caricata una sola volta all’inizio, come ship_image, e la classe la usa. Per ora, disegna lo sprite con un blit: screen.blit(player.image, player.rect). Nella prossima lezione, pygame lo disegnerà al posto tuo.

challenge icon

Sfida

Medio
  1. Scrivi class Player(pygame.sprite.Sprite) come sopra: self.image è ship_image, il fondo al centro di self.rect si trova in (320, 470).
  2. Il suo update sposta il Rect di 6 pixel a sinistra o a destra con le frecce e lo mantiene all'interno della finestra: sposta al suo interno le righe iniziali.
  3. Crea player = Player(), chiama player.update() a ogni fotogramma e disegna player.image in player.rect.

Provalo tu

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Ship")
clock = pygame.time.Clock()

ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship_image.get_rect(midbottom=(320, 470))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        ship_rect.x -= 6
    if keys[pygame.K_RIGHT]:
        ship_rect.x += 6
    ship_rect.clamp_ip(screen.get_rect())

    screen.fill((20, 22, 40))
    screen.blit(ship_image, ship_rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Tutte le lezioni di Sprite e immagini

Esercitati da solo: Playground Pygame