Self es el objeto
Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 12 de 36.
Una clase puede crear tantos objetos como quieras, y cada uno conserva sus propios atributos. Dale a __init__ un parámetro de velocidad y dos estrellas podrán caer a velocidades diferentes:
slow = Star(200, 0, 1)
fast = Star(440, 0, 3)Cuando escribes slow.update(), Python ejecuta Star.update(slow): self es slow, así que self.y += self.speed mueve slow 1 unidad. fast.update() ejecuta las mismas líneas con self asignado a fast y lo mueve 3 unidades. Un método, dos objetos, y ninguno modifica los valores del otro.
Por eso, cada valor que pertenece a un objeto necesita self. delante. Un nombre sin él, como speed, es una variable local común del método: desaparece cuando el método termina.
Desafío
Fácil- Agrega un tercer parámetro,
speed, a__init__y guárdalo comoself.speed. - Reemplaza
starpor dos estrellas:slow = Star(200, 0, 1)yfast = Star(440, 0, 3). - Actualiza y dibuja ambas estrellas en cada fotograma.
Pruébalo tú mismo
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()
Todas las lecciones de Sprites e imágenes
1Cargar imágenes
Cargar una imagenColocarla con un rectánguloMover la imagenRepetir un fondo en mosaicoPíxeles transparentes2Girar, voltear y escalar
Girar alrededor del centroApuntar en la dirección del vueloEscalar una imagenGirar desde la imagen original5Colisiones precisas a nivel de píxel
Los rectángulos parecen injustosMáscarasSprites precisos a nivel de píxelHitboxes circulares3Clases para objetos del juego
Tu primera claseMétodosSelf es el objetoUna lista de objetosObjetos con imágenesUna subclase6Animación con hojas de sprites
Recortar una hoja de spritesUn contador de fotogramasAnimar con el tiempoUna explosión de una sola vezPractica por tu cuenta: Playground de Pygame