Menu
CoddyTech

Self è l’oggetto

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

Una classe può creare tutti gli oggetti che vuoi e ciascuno conserva i propri attributi. Aggiungi a __init__ un parametro speed e due stelle possono cadere a velocità diverse:

slow = Star(200, 0, 1)
fast = Star(440, 0, 3)

Quando scrivi slow.update(), Python esegue Star.update(slow): self è slow, quindi self.y += self.speed sposta slow di 1. fast.update() esegue le stesse righe con self impostato su fast e lo sposta di 3. Un metodo, due oggetti, e nessuno dei due tocca i numeri dell'altro.

Ecco perché ogni valore appartenente a un oggetto deve avere self. davanti. Un nome senza, come speed, è una semplice variabile locale del metodo: scompare quando il metodo termina.

challenge icon

Sfida

Facile
  1. Aggiungi a __init__ un terzo parametro, speed, e memorizzalo come self.speed.
  2. Sostituisci star con due stelle: slow = Star(200, 0, 1) e fast = Star(440, 0, 3).
  3. Aggiorna e disegna entrambe le stelle a ogni fotogramma.

Provalo tu

import pygame

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

class Star:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 2

    def update(self):
        self.y += self.speed
        if self.y > 480:
            self.y = 0

    def draw(self, screen):
        pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)


star = Star(320, 0)

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

    star.update()

    screen.fill((20, 22, 40))
    star.draw(screen)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Tutte le lezioni di Sprite e immagini

Esercitati da solo: Playground Pygame