Oggetti con immagini
Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 14 di 36.
I nemici sono immagini che si muovono su Rect, e il codice iniziale gestisce manualmente tre Rect e tre blit. Una classe può contenere insieme un’immagine e il suo Rect:
class Enemy:
def __init__(self, image, x, y):
self.image = image
self.rect = image.get_rect(center=(x, y))
self.speed = 2
def update(self):
self.rect.y += self.speed
if self.rect.top > 480:
self.rect.bottom = 0
def draw(self, screen):
screen.blit(self.image, self.rect)L’immagine viene passata, non caricata in __init__. Carica ogni file una sola volta all’inizio e passa la stessa Surface a ogni nemico che la usa: dieci nemici rossi condividono la stessa immagine rossa. Ogni nemico ha però un proprio Rect, quindi si muove per conto suo.
Spostare il nemico significa spostare il suo Rect, mentre disegnarlo significa eseguire il blit della sua immagine sul Rect: questi sono i due attributi che ogni oggetto di gioco in questa sezione possiede.
Sfida
Medio- Scrivi la classe
Enemycon__init__(self, image, x, y),update(self)edraw(self, screen), come sopra: il Rect centrato in (x, y), che scende di 2 pixel a ogni fotogramma e torna sopra il bordo superiore quando si trova sotto la finestra. - Crea
enemies, una lista di tre elementi: quello rosso centrato in (160, 100), quello verde in (320, 100) e quello giallo in (480, 100). - Aggiorna e disegna ogni nemico della lista; rimuovi i tre Rect.
Provalo tu
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Rain")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
green = pygame.image.load("assets/images/enemy_green.png").convert_alpha()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert_alpha()
red_rect = red.get_rect(center=(160, 100))
green_rect = green.get_rect(center=(320, 100))
yellow_rect = yellow.get_rect(center=(480, 100))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
for rect in (red_rect, green_rect, yellow_rect):
rect.y += 2
if rect.top > 480:
rect.bottom = 0
screen.fill((20, 22, 40))
screen.blit(red, red_rect)
screen.blit(green, green_rect)
screen.blit(yellow, yellow_rect)
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 trasparenti2Ruota, 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