La clase Sprite
Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 16 de 36.
Hasta ahora, todos los objetos del juego han tenido una imagen, un Rect, un update y una forma de dibujarse. pygame tiene una clase creada justo para eso: pygame.sprite.Sprite. Tus objetos del juego se convierten en subclases de ella:
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = ship_image
self.rect = self.image.get_rect(midbottom=(320, 470))
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.rect.x -= 6Tres reglas. Llama primero a super().__init__(): esto configura lo que la clase Sprite necesita internamente. Llama self.image a la imagen y self.rect a la posición, exactamente así: el propio código de pygame lee esos dos nombres. Pon las reglas que se ejecutan en cada fotograma en update.
La imagen de la nave se carga una vez al principio, como ship_image, y la clase la usa. Por ahora, dibuja el sprite con un blit: screen.blit(player.image, player.rect). En la siguiente lección, pygame se encargará de dibujarlo.
Desafío
Intermedio- Escribe
class Player(pygame.sprite.Sprite)como se muestra arriba:self.imageesship_image,self.recttiene el centro de su borde inferior en(320, 470). - Su método
updatemueve el Rect 6 píxeles a la izquierda o a la derecha con las flechas y lo mantiene dentro de la ventana: mueve a este las líneas iniciales. - Crea
player = Player(), llama aplayer.update()en cada fotograma y dibujaplayer.imageenplayer.rect.
Pruébalo tú mismo
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Ship")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship_image.get_rect(midbottom=(320, 470))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
ship_rect.x -= 6
if keys[pygame.K_RIGHT]:
ship_rect.x += 6
ship_rect.clamp_ip(screen.get_rect())
screen.fill((20, 22, 40))
screen.blit(ship_image, ship_rect)
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 transparentes4Sprites y grupos
La clase SpriteGruposEliminar con kill()Detectar colisiones con spritecollideGrupo contra grupo2Girar, 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