Menu
CoddyTech

Self ist das Objekt

Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 12 von 36.

Eine Klasse kann beliebig viele Objekte erzeugen, und jedes behält seine eigenen Attribute. Gib __init__ einen Geschwindigkeitsparameter, und zwei Sterne können mit unterschiedlichen Geschwindigkeiten fallen:

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

Wenn du slow.update() schreibst, führt Python Star.update(slow) aus: self ist slow, also bewegt self.y += self.speed slow um 1. fast.update() führt dieselben Zeilen mit self auf fast gesetzt aus und bewegt es um 3. Eine Methode, zwei Objekte, und keines greift auf die Zahlen des anderen zu.

Deshalb braucht jeder Wert, der zu einem Objekt gehört, ein self. davor. Ein Name ohne dieses Präfix, wie speed, ist eine einfache lokale Variable der Methode: Sie verschwindet, wenn die Methode endet.

challenge icon

Aufgabe

Einfach
  1. Gib __init__ einen dritten Parameter, speed, und speichere ihn als self.speed.
  2. Ersetze star durch zwei Sterne: slow = Star(200, 0, 1) und fast = Star(440, 0, 3).
  3. Aktualisiere und zeichne beide Sterne in jedem Frame.

Probier es selbst

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()

Alle Lektionen in Sprites und Bilder

Übe selbstständig: Pygame-Playground