Self é o objeto
Parte da seção Sprites e imagens do Journey de Pygame da Coddy. Lição 12 de 36.
Uma classe pode criar quantos objetos você quiser, e cada um mantém seus próprios atributos. Adicione um parâmetro de velocidade a __init__, e duas estrelas poderão cair em velocidades diferentes:
slow = Star(200, 0, 1)
fast = Star(440, 0, 3)Quando você escreve slow.update(), Python executa Star.update(slow): self é slow, então self.y += self.speed move slow em 1. fast.update() executa as mesmas linhas com self definido como fast e o move em 3. Um método, dois objetos, e nenhum deles altera os números do outro.
É por isso que todo valor pertencente a um objeto precisa ter self. antes dele. Um nome sem isso, como speed, é uma variável local comum do método: ela desaparece quando o método termina.
Desafio
Fácil- Dê a
__init__um terceiro parâmetro,speed, e armazene-o comoself.speed. - Substitua
starpor duas estrelas:slow = Star(200, 0, 1)efast = Star(440, 0, 3). - Atualize e desenhe as duas estrelas a cada quadro.
Experimente você mesmo
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 as lições de Sprites e imagens
1Carregando imagens
Carregue uma imagemPosicione-a com um RectMova a imagemLadrilhe o plano de fundoPixels transparentes2Girar, Inverter, Redimensionar
Girar em torno do centroFicar de frente para a direção do vooRedimensionar uma imagemGirar a partir do original3Classes para Objetos de Jogos
Sua primeira classeMétodosSelf é o objetoUma lista de objetosObjetos com imagensUma subclasse6Animação com Sprite Sheets
Recorte uma Sprite SheetUm contador de quadrosAnime com o tempoUma explosão de disparo únicoPratique por conta própria: Playground de Pygame