Sito web di notizie tecnologiche e videogames.

Pygame Shooter Parte 1: Sprite e Controlli

89

In questo articolo su Pygame getteremo le basi per il nostro Pygame Shooter e metteremo un bel po’ di carne al fuoco introducendo le classi per descrivere i nostri sprite, spesso infatti i videogiochi sono sviluppati con il paradigma di programmazione ad oggetti.

Definiamo le variabili

Come nell’articolo precedente definiamo le nostre variabili per le impostazioni del gioco come la larghezza/lunghezza della finestra, i colori e gli FPS:

Pygame Shooter Parte 1: Sprite e Controlli

L’obiettivo di questo programma è quello di muovere orizzontalmente un rettangolo alla base della nostra finestra tramite le frecce della tastiera e di controllare che esso non esca fuori dalla finestra. Il rettangolo verrà poi rimpiazzato con un’immagine di una navicella per il nostro Pygame Shooter.

Per fare questo abbiamo bisogno innanzitutto di uno sprite, ovvero il rettangolo.

Definiamo la classe Sprite

Per questo definiamo la classe Sprite che rappresenta il nostro player:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.width = 50   # larghezza
        self.height = 50  # lunghezza       
        #creo l’oggetto
        self.image = pygame.Surface((self.width, self.height))
        #setto il suo colore        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        #setto la x e la y iniziali        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT – 10 

Movimenti dello sprite

Aggiungiamo alla classe Sprite la funzione update che verrà richiamata ad ogni esecuzione del game loop. Il suo scopo è quello di modificare lo stato delle variabili associate allo sprite per modificarne il comportamento. Nel nostro caso:

def update(self):
     self.speedx = 0
     keystate = pygame.key.get_pressed()
     if keystate[pygame.K_LEFT]:
        self.speedx = -8
     if keystate[pygame.K_RIGHT]:
         self.speedx = 8
         self.rect.x += self.speedx

In questo modo settiamo speedx (la velocità con sui si muoverà sull’asse x) a 0 (quindi starà fermo) a meno che il tasto di destra o sinistra sia premuto.

Restare all’interno della finestra

Infine dobbiamo assicurarci che il nostro sprite non vada fuori dalla finestra, quindi aggiungiamo alla funzione update() le seguenti righe:

if self.rect.right > WIDTH:
        self.rect.right = WIDTH
if self.rect.left < 0:
        self.rect.left = 0

In questo modo quando lo sprite cercherà di spostarsi oltre i limiti della finestra sarà fermato. Una volta definita la classe Sprite ne instanziamo un oggetto e lo aggiungiamo al gruppo di sprite del programma.

all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

Link al codice:  code
Link all’articolo precedente su Pygame … articolo precedente

Commenti