Creación y movimiento de sprites - Curso Pygame - Capítulo 7


Vamos a empezar a trabajar con sprites y lo vamos a hacer desde lo más básico, para quienes no hayan trabajado con sprites.

En Pygame, cualquier sprite se representa como un rectángulo, es decir, se representa de la misma forma que el ordenador las almacena, en formas rectangulares o cuadradas, solo que podemos utilizar imágenes transparentes para que no quede un juego rectangular o cuadrado.
Por lo tanto, a partir de ahora, cuando hable de rectángulo me referiré a las imágenes.

A partir de este capítulo, empiezo a trabajar con clases, por lo que si no sabes mucho de programación orientada a objetos, te recomiendo mi curso de POO en Python.

En el siguiente código tienes una clase que va a representar a la del jugador principal, pero primero, antes de cargar una imagen del personaje, vamos a aprender a manejar los sprites

Código

class Jugador(pygame.sprite.Sprite)
    # Sprite del jugador
    def __init__(self):
        # Heredamos el init de la clase Sprite de Pygame
        super().__init__()
        # Rectángulo (jugador)
        self.image = pygame.Surface((200, 200))
        self.image.fill(H_FA2F2F)
        # Obtiene el rectángulo (sprite)
        self.rect = self.image.get_rect()
        # Centra el rectángulo (sprite)
        self.rect.center = (ANCHO // 2, ALTO // 2)

Creamos una clase que herede de la clase Sprite de pygame. Esta clase será la que tendrá el jugador. Aquí, a nuestro personaje principal le iremos añadiendo características y habilidades.

Especificamos un método init().
Lo primero es heredar todo lo que contiene la superclase en este caso Sprite de pygame. Esta clase sprite viene preparada para hacernos más sencillo el uso de sprites.
Una vez hemos heredado de ella, podemos utilizar sus atributos y métodos.
Las imágenes en Pygame son rectángulos (ojo, ya expliqué que un rectángulo si especificas el mismo número en las coordenadas x como en y haces un cuadrado). Estos rectángulos, pueden ser imágenes .png con transparencia y ya no se verán como rectángulos aunque en realidad lo sean.

En self.image = pygame.Surface((200, 200)) lo que hago es especificar un tamaño de rectángulo. Se especifica 200 de x y 200 pixeles de y, lo que hace un cuadrado perfecto.
Y esta “image” va a representar la imagen del personaje.
Si no recuerdas bien lo de las formas geométricas te recomiendo un repaso al capítulo 2.
Con surface nos referimos a la superficie de la ventana.

Le aplicamos a image un color con fill.

Con self.rect = self.image.get_rect() obtenemos el rectángulo de la imagen del jugador. Esto nos permitirá manipularlo.

Con self.rect.center = (ANCHO // 2, ALTO // 2) centramos la imagen del jugador.

Para los sprites, tendremos que crear en las clases un método de actualización para poder crear movimiento.
Este método tiene que llamarse update, ya que es un método heredado de la clase Sprite.
El contenido de este método se va a actualizar cada vuelta.
Si queremos por ejemplo que el sprite, se mueva de arriba a abajo, especificaremos la coordenada "y" del rectángulo y según los píxeles que le incrementes, cada vuelta del bucle irá más rápido o más lento.
Por ejemplo, con 10, como tienes en el código, cada vez que se ejecute el bucle del juego, el rectángulo avanza 10 píxeles.

En el vídeo puedes ver más opciones sobre cómo mover en otras direcciones los sprites.

Código

def update(self):
    # Actualiza esto cada vuelta de bucle.
    self.rect.y += 10
    if self.rect.top > ALTO:
        self.rect.bottom = 0

Para finalmente poder mostrar sprites, debes añadirlos a grupos de sprites.

Código

#Grupo de sprites, instanciación del objeto jugador.
sprites = pygame.sprite.Group()
jugador = Jugador()
sprites.add(jugador)

Además, deberás añadir un update en el bucle del juego. Si tu grupo de sprites se llama sprites como el mio, pues debes añadir esto:

Código

sprites.update()

Y por último, un draw para dibujar el sprite en la pantalla.

Código

sprites.draw(pantalla)

Suscríbete a mi canal de YouTube para apoyarme

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.


Comentarios

Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.